Classe: Mongoid::Association::Referenced::HasAndBelongsToMany::Proxy

Herda:
Mongoid::Association::Referenced::HasMany::Proxy mostrar tudo
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

Proxy::KEEPER_METHODS

Resumo do atributo de instância

Atributos herdados do proxy

#_association, #_base, #_target

Recolhimento do Resumo do método de instância

Métodos incluídos do ClassMethods

missing_loader, incorporado?

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

#eager_loader, #embedded?

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

Exemplos:

Anexar um documento.

person.posts << post

Empurre um documento.

person.posts.push(post)

Concat com outros documentos.

person.posts.concat([ post_one, post_two ])

Parâmetros:

  • *args (Documento...)

    Qualquer número de documentos.

Retorna:

  • (Array <Document>)

    Os Docs carregados .



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.

Exemplos:

Criar um novo documento sobre a associação.

person.posts.build(:title => "A new post")

Parâmetros:

  • attributes (Hash) (padrão para: {})

    Os atributos do novo documento.

  • type (Classe) (padrão para: nil)

    A subclasse opcional a ser construída.

Rendimento:

  • (doc)

Retorna:



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.

Exemplos:

Concat com outros documentos.

person.posts.concat([ post_one, post_two ])

Parâmetros:

  • documentos (Array <Document>)

    Os Docs a serem adicionados.

Retorna:



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á.

Exemplos:

Exclua o documento.

person.posts.delete(post)

Parâmetros:

  • documento (Documento)

    O documento a ser removido.

Retorna:

  • (Documento)

    O documento correspondente.



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.

Exemplos:

Anular a associação.

person.preferences.nullify

Parâmetros:

  • substituição (Array <Documento>) (padrão para: [])

    Os documentos de substituição.



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 ])

Exemplos:

Substitua a associação.

Parâmetros:

  • substituição (Array <Document>)

    O alvo de substituição.

Retorna:

  • (Muitos)

    A associação.



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 escopoCritérios

Obtenha um critério para os documentos sem o escopo padrão aplicado.

Exemplos:

Obtenha os critérios sem escopo.

person.preferences.unscoped

Retorna:



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