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

Herda:
Referenciado::HasMany::Proxy
  • Objeto
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

Recolhimento do Resumo do método de instância

Métodos incluídos do ClassMethods

missing_loader, incorporado?

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.

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 .



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.

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:



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.

Exemplos:

Concat com outros documentos.

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

Parâmetros:

  • documentos (Array <Document>)

    Os Docs a serem adicionados.

Retorna:



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

Exemplos:

Exclua o documento.

person.posts.delete(post)

Parâmetros:

  • documento (Documento)

    O documento a ser removido.

Retorna:

  • (Documento)

    O documento correspondente.



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.

Exemplos:

Anular a associação.

person.preferences.nullify

Parâmetros:

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

    Os documentos de substituição.



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

Exemplos:

Substitua a associação.

Parâmetros:

  • substituição (Array <Document>)

    O alvo de substituição.

Retorna:

  • (Muitos)

    A associação.



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 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:



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