Classe: Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy
- Herda:
-
Referenciado::HasMany::Proxy
- Objeto
- Referenciado::HasMany::Proxy
- Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy
- Estendido por:
- Métodos de classe
- Definido em:
- lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb
Visão geral
Proxy transparente para associações has_and_belongs_to_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.
Definido sob namespace
Módulos: Métodos de classe
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(atributos = {}, tipo = nil) {|doc| ... } ➤ Documento (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.
-
#nullify(replacement = []) ➤ Object (também: #nullify_all, #clear, #purge)
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.
-
#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
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.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', linha 56 def <<(*Args) Docs = Args.achatar Método concat(Docs) se Docs.Tamanho > 1 se (doc = Docs.primeiro) acrescentar(doc) fazer # Ignoramos as alterações no valor da chave estrangeira no # change_attributes hash neste bloco de código por dois motivos: # # 1) O método add_to_set exclui o valor para o estrangeiro # no hash change_attributes, mas se inserirmos isso Método # com um valor para a chave estrangeira no # change_attributes hash, então queremos que ele exista fora # este método também. É usado mais tarde no Sincronizável Módulo # para definir as chaves estrangeiras inversas. # 2) O método reinício_unloaded acessa o valor para o estrangeiro # chave em _base, o que faz com que ela seja adicionada ao # change_attributes hash. Isso acontece porque ao ler # um atributo "resizable", ele é automaticamente adicionado ao # change_attributes hash. Isso é verdade apenas para o estrangeiro # valor chave para associações HABTM como outras associações # use strings para seus valores de chave estrangeira. Para consistência # com as outras associações, ignoramos esta adição a # o hash change_attributes. # Consulte MONGOID-4843 para uma discussão mais longa sobre isso. reinício_foreign_key_changes fazer _base.add_to_set(foreign_key => doc.public_send(_association.primary_key)) doc.Salvar se child_persistable?(doc) reinício_unloaded end end end não sincronizado(_base, foreign_key) e a auto end |
#build(atributos = {}, tipo = nil) {|doc| ... } ➤ Documento Também conhecido como: novo
Crie um novo documento a partir dos atributos e anexe-o a esta associação sem salvar.
120 121 122 123 124 125 126 127 128 129 |
# File 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', linha 120 def COMPILAR(attributes = {}, type = nada) doc = Factory.execute_build(type || classe, attributes, execute_callbacks: false) acrescentar(doc) doc.apply_post_processed_defaults _base.public_send(foreign_key).push(doc.public_send(_association.primary_key)) não sincronizado(doc, inverse_foreign_key) rendimento(doc) se block_given? doc.run_pending_callbacks doc 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.
102 103 104 105 106 107 108 |
# File 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', linha 102 def concat(documentos) ids, Docs, Inserções = {}, [], [] documentos.cada { |doc| append_document(doc, ids, Docs, Inserções) } _base.push(foreign_key => ids.keys) se persistente? || _criando? 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á.
143 144 145 146 147 148 149 150 151 |
# File 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', linha 143 def excluir(documento) doc = super se doc && persistente? _base.pull(foreign_key => doc.public_send(_association.primary_key)) _target._unloaded = critério não sincronizado(_base, foreign_key) end doc end |
#nullify(replacement = []) ➤ Objeto Também conhecido como: nullify_all, clear, excremento
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.
165 166 167 168 169 170 |
# File 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', linha 165 def anular(substituição = []) _target.cada { |doc| execute_callback :before_remove, doc } limpeza_inverse_for(substituição) a menos que _association.forced_nil_inverse? _base.set(foreign_key => _base.public_send(foreign_key).Limpar) se persistente? clear_target_for_nullify 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.
pessoa.preferências.substitute([ new_post ])
186 187 188 189 190 191 192 193 194 195 |
# File 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', linha 186 def substituir(substituição) limpar(substituição) se substituição.em branco? reinício_unloaded clear_foreign_key_changes mais push(substituição.compactar.uniq) end auto end |
#sem escopo ➤ Critérios
Obtenha um critério para os documentos sem o escopo padrão aplicado.
204 205 206 |
# File 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', linha 204 def sem escopo classe.sem escopo.any_in(_id: _base.public_send(foreign_key)) end |