Classe: Mongoid::Association::Referenced::HasMany::Proxy
- Herda:
- Muitos mostrar tudo
- Estendido por:
- Encaminhável, ClassMethods
- Definido em:
- lib/mongoid/association/referenced/has_many/proxy.rb
Visão geral
Proxy transparente para associações has_many. Uma instância dessa classe é retornada ao chamar o método de getter de associação no documento do assunto. Esta classe herda de Mongoid::Association::Proxy e encaminha a maioria de seus métodos para o destino da associação, ou seja, a array de documentos na collection do lado oposto que deve ser carregada.
Subclasses conhecidas diretas
Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy
Definido sob namespace
Módulos: Métodos de classe
Resumo constante
Constantes herdadas do Proxy
Resumo do atributo de instância
Atributos herdados do proxy
#_association, #_base, #_target
Recolhimento do Resumo do método de instância
-
#<<(*args) ➤ Array<Document> (também: #push)
Anexa um documento ou array de documentos à associação.
-
#build(attributes = {}, type = nil) ➤ Document (também: #new)
Crie um novo documento a partir dos atributos e anexe-o a esta associação sem salvar.
-
#concat(documents) ⇒ Array<Document>
Anexa uma array de documentos à associação.
-
#delete(documento) ➤ Document (também: #delete_one)
Exclua o documento da associação.
-
#delete_all(condição = nil) ➤ Inteiro
Exclui todos os documentos relacionados do banco de dados, dadas as condições fornecidas.
-
#Destruir_all(condição = nil) ➤ Inteiro
Destrói todos os documentos relacionados do banco de dados, dadas as condições fornecidas.
-
#cada(&bloco) ➤ Array<Document>
Iterar sobre cada documento na associação e produzir para o bloco fornecido.
-
#existe?(id_or_ conditions = :none) ➤ true | false
Determine se algum documento nesta associação existe no banco de dados.
-
#encontre(*args) {|Object| ... } ➤ Documento | Array<Document> | nada
Encontre o documento correspondente na associação, com base no ID ou nas condições.
-
#inicializar(base, destino, associação) ➤ Proxy
construtor
Crie uma instância de uma nova associação reference_many.
-
#nullify ➤ Object (também: #nullify_all)
Remove todas as associações entre o documento base e os documentos de destino, excluindo as chaves estrangeiras e as referências, deixando os documentos de destino órfãos no processo.
-
# excremento ➤Muitos (também: #clear)
Limpe a associação.
-
#substituto(substituição) ➤ Muitos
Substitui os documentos de destino fornecidos pelos documentos existentes na associação.
-
#sem escopo ➤ Critérios
Obtenha um critério para os documentos sem o escopo padrão aplicado.
Métodos incluídos do ClassMethods
Métodos herdados de Muitos
#em branco?, #create, #create!, #find_or_create_by, #find_or_create_by!, #find_or_initialize_by, #nil?, #respond_to?, #scoped, #serializable_hash
Métodos herdados do Proxy
apply_ordering, #extend_proxies, #klass, #reset_unloaded, #substitutable
Métodos incluídos noMarshable
Detalhes do construtor
#inicializar(base, destino, associação) ➤ Proxy
Crie uma instância de uma nova associação reference_many. Definirá a chave estrangeira e a base no objeto inverso.
48 49 50 51 52 53 |
# File 'lib/mongoid/association/referenced/has_many/proxy.rb', linha 48 def inicializar(base, Alvo, associação) enum = Tem muitos::Enumerável.Novo(Alvo, base, associação) super(base, enum, associação) fazer create_mixed se classe. && !classe.cíclica? end end |
Manipulação de métodos dinâmicos
Esta classe lida com métodos dinâmicos através do método method_missing
#method_missing ➤ Critérios | Objeto (privado)
Se a array de destino não responder ao método fornecido, tente encontrar um escopo nomeado ou critérios na classe e envie a chamada para lá.
Se o método existir na array, use o comportamento de proxy padrão.
TODO: verificar se estamos usando consistentemente respond_to_missing
anywhere we define method_missing.
rubocop:disable Estilo/MissingRespondToMissing
465 466 467 468 469 470 471 472 473 |
# File 'lib/mongoid/association/referenced/has_many/proxy.rb', linha 465 ruby2_keywords def method_missing(name, *Args, &noum: bloco ; verb: bloquear) se _target.respond_to?(name) _target.enviar(name, *Args, &noum: bloco ; verb: bloquear) mais classe.enviar(:with_scope, critério) fazer critério.public_send(name, *Args, &noum: bloco ; verb: bloquear) end end end |
Detalhes do método de instância
#<<(*args) ➤ Array<Document> Também conhecido como: push
Anexa um documento ou array de documentos à associação. Definirá o principal e atualizará o índice no processo.
70 71 72 73 74 75 76 77 78 79 |
# File 'lib/mongoid/association/referenced/has_many/proxy.rb', linha 70 def <<(*Args) Docs = Args.achatar Método concat(Docs) se Docs.Tamanho > 1 se (doc = Docs.primeiro) acrescentar(doc) doc.Salvar se persistente? && !_assigning? && !doc.validado? end auto end |
#build(attributes = {}, type = nil) ⇒ Document Também conhecido como: novo
Crie um novo documento a partir dos atributos e anexe-o a esta associação sem salvar.
115 116 117 118 119 120 121 122 123 |
# File 'lib/mongoid/association/referenced/has_many/proxy.rb', linha 115 def COMPILAR(attributes = {}, type = nada) Factory.execute_build(type || classe, attributes, execute_callbacks: false).toque fazer |doc| acrescentar(doc) doc.apply_post_processed_defaults rendimento doc se block_given? doc.run_pending_callbacks doc.run_callbacks(:build) { doc } end end |
#concat(documents) ➤ Array<Document>
Anexa uma array de documentos à associação. Executa uma inserção em lote dos documentos em vez de persistir um de cada vez.
92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/mongoid/association/referenced/has_many/proxy.rb', linha 92 def concat(documentos) Docs, Inserções = [], [] documentos.cada fazer |doc| próximo a menos que doc acrescentar(doc) save_or_delay(doc, Docs, Inserções) se persistente? end persist_delayed(Docs, Inserções) auto end |
#delete(document) ➤ Documento também conhecido como: delete_one
Exclua o documento da associação. Isso definirá a chave estrangeira no documento como nula. Se as opções dependentes na associação forem :delete_all ou :destroy, a remoção apropriada ocorrerá.
137 138 139 140 141 142 143 144 145 146 147 148 |
# File 'lib/mongoid/association/referenced/has_many/proxy.rb', linha 137 def excluir(documento) execute_callbacks_round(:remove, documento) fazer Resultado = _target.excluir(documento) fazer |doc| se doc unbind_one(doc) cascata!(doc) a menos que _assigning? end end Resultado.toque { reinício_unloaded } end end |
#delete_all(condição = nil) ➤ Inteiro
Exclui todos os documentos relacionados do banco de dados, dadas as condições fornecidas.
166 167 168 |
# File 'lib/mongoid/association/referenced/has_many/proxy.rb', linha 166 def delete_all(condições = nada) remove_all(condições, :delete_all) end |
#Destruir_all(condição = nil) ➤ Inteiro
Destrói todos os documentos relacionados do banco de dados, dadas as condições fornecidas.
182 183 184 |
# File 'lib/mongoid/association/referenced/has_many/proxy.rb', linha 182 def Destruir_all(condições = nada) remove_all(condições, :destroy_all) end |
#cada(&bloco) ➤ Array<Documento>
Isso carregará toda a associação na memória.
Iterar sobre cada documento na associação e produzir para o bloco fornecido.
197 198 199 200 201 202 203 |
# File 'lib/mongoid/association/referenced/has_many/proxy.rb', linha 197 def cada(&noum: bloco ; verb: bloquear) se noum: bloco ; verb: bloquear _target.cada(&noum: bloco ; verb: bloquear) mais to_enum end end |
#existe?(id_or_ conditions = :none) ➤ true | false
Determine se algum documento nesta associação existe no banco de dados.
Se a associação contiver documentos, mas todos os documentos existirem apenas no aplicativo, ou seja, não tiverem sido persistentes no banco de dados, esse método retornará falso.
Este método consulta o banco de dados de dados em cada invocação, mesmo que a associação já esteja carregada na memória.
227 228 229 |
# File 'lib/mongoid/association/referenced/has_many/proxy.rb', linha 227 def existe?(id_or_ conditions = : none) critério.existe?(id_or_ conditions) end |
#find(*args) {|Object| ... } ⇒ Document | Array<Document> | nil
Cada argumento pode ser um ID individual, uma array de ids ou uma array agrupada. Cada array será achatada.
Isso manterá os documentos correspondentes na memória para iteração posterior.
Encontre o documento correspondente na associação, com base no ID ou nas condições.
Este método delega para Mongoid::Criteria#find. Se este método não receber um bloqueio, ele retornará um ou vários documentos para os valores de _id fornecidos.
Se esse método receber um bloco, ele retornará o primeiro documento daqueles encontrados pelo objeto Criteria atual para o qual o bloco retornará um valor verdadeiro.
262 263 264 265 266 |
# File 'lib/mongoid/association/referenced/has_many/proxy.rb', linha 262 def find(*Args, &noum: bloco ; verb: bloquear) correspondência = critério.find(*Args, &noum: bloco ; verb: bloquear) Array(correspondência).cada { |doc| _target.push(doc) } correspondência end |
#nullify ➤ Objeto também conhecido como: nullify_all
Remove todas as associações entre o documento base e os documentos de destino, excluindo as chaves estrangeiras e as referências, deixando os documentos de destino órfãos no processo.
274 275 276 277 278 279 280 |
# File 'lib/mongoid/association/referenced/has_many/proxy.rb', linha 274 def anular critério.update_all(foreign_key => nada) _target.Limpar fazer |doc| unbind_one(doc) doc.change_attributes.excluir(foreign_key) end end |
#expurgo ⇒ Muitos Também conhecido como: limpar
Limpe a associação. Excluirá os documentos do banco de dados se eles já forem persistentes.
291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 |
# File 'lib/mongoid/association/referenced/has_many/proxy.rb', linha 291 def limpar Método anular a menos que _association.destrutivo? after_remove_error = nada critério.delete_all muitos = _target.Limpar fazer |doc| execute_callback :before_remove, doc unbind_one(doc) doc.destruído = true começar execute_callback :after_remove, doc salvar StandardError => e after_remove_error = e end end aumentar after_remove_error se after_remove_error muitos end |
#substituto(substituição) ➤ Muitos
Substitui os documentos de destino fornecidos pelos documentos existentes na associação. Se o novo destino for nulo, execute a exclusão necessária.
324 325 326 327 328 329 330 331 332 333 334 335 336 337 |
# File 'lib/mongoid/association/referenced/has_many/proxy.rb', linha 324 def substituir(substituição) se substituição new_docs, Docs = substituição.compactar, [] new_ids = new_docs.map(&:_id) remove_not_in(new_ids) new_docs.cada fazer |doc| Docs.push(doc) se doc.enviar(foreign_key) != _base.enviar(_association.primary_key) end concat(Docs) mais limpar end auto end |
#sem escopo ➤ Critérios
Obtenha um critério para os documentos sem o escopo padrão aplicado.
346 347 348 |
# File 'lib/mongoid/association/referenced/has_many/proxy.rb', linha 346 def sem escopo classe.sem escopo.ONDE(foreign_key => _base.enviar(_association.primary_key)) end |