Classe: Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy
- Herda:
-
Mongoid::Association::Referenced::HasMany::Proxy
- Objeto
- Proxy
- Muitos
- Mongoid::Association::Referenced::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
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(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
Métodos herdados de Mongoid::Association::Referenced::HasMany::Proxy
#delete_all, #destroy_all, #each, #exists?, #find, #initialize
Métodos incluídos do Mongoid::Association::Referenced::HasMany::Proxy::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, #initialize, #klass, #reset_unloaded, #substitutable
Métodos incluídos noMarshable
Detalhes do construtor
Esta classe herda um construtor de Mongoid::Association::Referenced::HasMany::Proxy
Manipulação de métodos dinâmicos
Esta classe lida com métodos dinâmicos por meio do método method_missing na classe Mongoid::Association::Referenced::HasMany::Proxy
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.
rubocop:disable Metrics/AbcSize
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 90 91 |
# File 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', linha 58 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.
123 124 125 126 127 128 129 130 131 132 |
# File 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', linha 123 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.
105 106 107 108 109 110 111 |
# File 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', linha 105 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á.
146 147 148 149 150 151 152 153 154 |
# File 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', linha 146 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.
168 169 170 171 172 173 |
# File 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', linha 168 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 ])
189 190 191 192 193 194 195 196 197 198 |
# File 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', linha 189 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.
207 208 209 |
# File 'lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb', linha 207 def sem escopo classe.sem escopo.any_in(_id: _base.public_send(foreign_key)) end |