Classe: Mongoid::Association::Embedded::EmbedsMany::Proxy

Herda:
Muitos
  • Objeto
mostrar tudo
Inclui:
Lotable
Definido em:
build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb

Resumo do atributo de instância

Atributos herdados do proxy

#_association, #_base, #_target

Recolhimento do Resumo do método de classe

Recolhimento do Resumo do método de instância

Métodos incluídos no Lote

#batch_clear, #batch_insert, #batch_remove, #batch_replace

Métodos incluídos no Posicional

#positionalmente

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, #init, #klass, #reset_unloaded, #substitutable

Métodos incluídos noMarshable

.

Detalhes do construtor

#inicializar(base, destino, associação) ➤ Muitos

Crie uma instância de uma nova associação embeds_many.

Exemplos:

Crie a nova associação.

Many.new(person, addresses, association)

Parâmetros:

  • base (Documento)

    O documento do qual esta associação depende.

  • Alvo (Array <Document>)

    Os documentos filhos da associação.

  • associação (Associação)

    Os metadados de associação



273
274
275
276
277
278
279
280
281
282
283
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 273

def inicializar(base, Alvo, associação)
  init(base, Alvo, associação) fazer
    _target.cada_com_index fazer |doc, index|
      integrar(doc)
      doc._index = index
    end
    update_attributes_hash
    @_unscoped = _target.dup
    @_target = escopo(_target)
  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.

Parâmetros:

  • name (Símbolo | string)

    O nome do método.

  • *args (Objeto...)

    O método args.

  • noum: bloco ; verb: bloquear (Proc)

    Bloco opcional a ser aprovado.

Retorna:

  • (Critérios | Objeto)

    Um critério ou valor de retorno do destino.



439
440
441
442
443
444
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 439

ruby2_keywords def method_missing(name, *Args, &noum: bloco ; verb: bloquear)
  Método super se _target.respond_to?(name)
  classe.enviar(:with_scope, critério) fazer
    critério.public_send(name, *Args, &noum: bloco ; verb: bloquear)
  end
end

Detalhes do método de classe

.incorporado?verdadeiro

Retorna verdadeiro se a associação for incorporada. Neste caso, sempre verdadeiro.

Exemplos:

A associação está incorporada?

Association::Embedded::EmbedsMany.embedded?

Retorna:

  • (verdadeiro)

    verdadeiro.



555
556
557
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 555

def incorporado?
  true
end

.foreign_key_suffix ➤ nil

Retorna o sufixo do campo de chave estrangeira, "_id" ou "_ids".

Exemplos:

Obtenha o sufixo para a chave estrangeira.

Association::Embedded::EmbedsMany.foreign_key_suffix

Retorna:

  • (nil)

    nil.



565
566
567
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 565

def foreign_key_suffix
  nada
end

Detalhes do método de instância

#<<(*args) ➤ Objeto 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.addresses << address

Empurre um documento.

person.addresses.push(address)

Parâmetros:

  • *args (Documento...)

    Qualquer número de documentos.



23
24
25
26
27
28
29
30
31
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 23

def <<(*Args)
  Docs = Args.achatar
  Método concat(Docs) se Docs.Tamanho > 1
  se doc = Docs.primeiro
    acrescentar(doc)
    doc.Salvar se persistente? && !_assigning?
  end
  auto
end

#_remove(document) ➤ Objeto

Este método faz parte de uma API privada. Evite usar esse método, se possível, pois ele pode ser removido ou alterado no futuro.

Remove um único documento da coleção *somente na memória*. Ela não persistirá a alteração.

Parâmetros:

  • documento (Documento)

    O documento a ser excluído.



167
168
169
170
171
172
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 167

def _remove(documento)
  _target.delete_one(documento)
  _unscoped.delete_one(documento)
  update_attributes_hash
  reIndexar
end

#as_document ➤ Array<Hash>

Obtenha esta associação como sua representação no banco de dados.

Exemplos:

Converta a associação em um hash de atributos.

person.addresses.as_document

Retorna:

  • (Array<Hash>)

    A associação conforme armazenada no banco de dados.



41
42
43
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 41

def as_document
  as_attributes.coletar { |attrs| BSON::Documento.Novo(attrs) }
end

#build(atributos = {}, tipo = nil) {|doc| ... } ➤ Documento Também conhecido como: novo

Cria um novo documento na associação e o anexa ao destino. Aceita um tipo opcional se você quiser especificar uma subclasse.

Exemplos:

Criar um novo documento sobre a associação.

person.people.build(:name => "Bozo")

Parâmetros:

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

    Os atributos com os quais construir o documento.

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

    Classe opcional com a qual construir o documento.

Rendimento:

  • (doc)

Retorna:



69
70
71
72
73
74
75
76
77
78
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 69

def COMPILAR(attributes = {}, type = nada)
  doc = Factory.execute_build(type || _association.classe, attributes, execute_callbacks: false)
  acrescentar(doc)
  doc.apply_post_processed_defaults
  rendimento(doc) se block_given?
  doc.run_pending_callbacks
  doc.run_callbacks(:build) { doc }
  _base._reset_memoized_descendentes!
  doc
end

#clearself

Limpe a associação. Excluirá os documentos do banco de dados se eles já forem persistentes.

Se o documento do host não for persistente, mas seu _id corresponder a um documento persistente, chamar #clear em uma associação removerá os documentos da associação do banco de dados, mesmo que o conjunto de documentos no aplicativo (conforme carregado no host) seja diferente do que é no banco de dados, e o host também não pode conter nenhum documento persistente na associação.

Exemplos:

Limpe a associação.

person.addresses.clear

Retorna:

  • (self)

    A associação vazia.



96
97
98
99
100
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 96

def Limpar
  batch_clear(_target.dup)
  update_attributes_hash
  auto
end

#concat(Docs) ➤ 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.addresses.concat([ address_one, address_two ])

Parâmetros:

  • Docs (Array <Document>)

    Os Docs a serem adicionados.

Retorna:



54
55
56
57
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 54

def concat(Docs)
  batch_insert(Docs) a menos que Docs.vazio?
  auto
end

#count(*args, &block) ⇒ Integer

Retorna uma contagem do número de documentos na associação que realmente foram persistentes no banco de banco de dados.

Use #size se quiser o número total de documentos.

Se argumentos ou bloqueio estiverem presentes, #count delegará para o método #count em target e incluirá documentos persistentes e não persistentes.

Exemplos:

Obtenha a contagem de documentos persistentes.

person.addresses.count

Obtenha a contagem de todos os documentos correspondentes a um bloco.

person.addresses.count { |a| a.country == "FR" }

Você usa #persistente? bloco interno para contar documentos persistentes.

person.addresses.count { |a| a.persisted? && a.country == "FR" }

Parâmetros:

  • *args (Objeto...)

    Args para delegar ao destino.

Retorna:

  • (Inteiro)

    O número total de Docs incorporados persistentes , conforme sinalizado pelo #persisted? método.



124
125
126
127
128
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 124

def contar(*Args, &noum: bloco ; verb: bloquear)
  Método _target.contar(*Args, &noum: bloco ; verb: bloquear) se Args.algum? || noum: bloco ; verb: bloquear

  _target.selecione { |doc| doc.persistiu? }.Tamanho
end

#excluir(documento) ➤ Documento | nil Também conhecido como: delete_one

Exclua o documento fornecido do destino. Este método é proxy para reindexar a array após a ocorrência da operação.

Exemplos:

Exclua o documento da associação.

person.addresses.delete(address)

Parâmetros:

  • documento (Documento)

    O documento a ser excluído.

Retorna:

  • (Document | nil)

    O documento excluído ou nulo se nada for excluído.



139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 139

def excluir(documento)
  execute_callbacks_round(:remove, documento) fazer
    doc = _target.delete_one(documento)
    se doc && !_binding?
      _unscoped.delete_one(doc)
      se _assigning?
        _base.add_atomic_pull(doc)
      mais
        doc.excluir(suprimir: true)
        unbind_one(doc)
      end
      update_attributes_hash
    end
    reIndexar
    doc
  end
end

#delete_all(condição = {}) ➤ Inteiro

Exclua todos os documentos da associação sem executar chamadas de resposta.

Exemplos:

Exclua todos os documentos da associação.

person.addresses.delete_all

Exclua documentos condicionalmente da associação.

person.addresses.delete_all({ :street => "Bond" })

Parâmetros:

  • condições (Hash) (padrão para: {})

    Condições sobre quais documentos excluir.

Retorna:

  • (Inteiro)

    O número de documentos excluídos.



185
186
187
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 185

def delete_all(condições = {})
  remove_all(condições, :delete)
end

#delete_ifMuitos | Enumerador

Exclua todos os documentos para os quais o bloqueio fornecido retorna verdadeiro.

Exemplos:

Exclua os documentos correspondentes.

person.addresses.delete_if do |doc|
  doc.state == "GA"
end

Retorna:

  • (Muitos | Enumerador)

    A associação ou um enumerador se nenhum bloco foi fornecido.



198
199
200
201
202
203
204
205
206
207
208
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 198

def delete_if
  se block_given?
    dup_target = _target.dup
    dup_target.cada fazer |doc|
      excluir(doc) se rendimento(doc)
    end
    auto
  mais
    super
  end
end

#Destruir_all(condição = {}) ➤ Inteiro

Destrua todos os documentos na associação enquanto executa callbacks.

Exemplos:

Destrua todos os documentos da associação.

person.addresses.destroy_all

Destrua condicionalmente documentos da associação.

person.addresses.destroy_all({ :street => "Bond" })

Parâmetros:

  • condições (Hash) (padrão para: {})

    Condições sobre quais documentos destruir.

Retorna:

  • (Inteiro)

    O número de documentos destruídos.



221
222
223
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 221

def Destruir_all(condições = {})
  remove_all(condições, :destroy)
end

#existe?verdadeiro | false

Determine se algum documento nesta associação existe no banco de dados.

Exemplos:

Existem documentos persistentes?

person.posts.exists?

Retorna:

  • (verdadeiro | falso)

    Verdadeiro se documentos persistentes existem, falso se não.



231
232
233
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 231

def existe?
  _target.algum? { |doc| doc.persistiu? }
end

#find(*args, &block) ➤ Documento | Array<Documento> | nada

Encontra um documento nesta associação por meio de vários métodos diferentes.

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.

Exemplos:

Encontre um documento por seu ID.

person.addresses.find(BSON::ObjectId.new)

Encontre documentos para vários IDs.

person.addresses.find([ BSON::ObjectId.new, BSON::ObjectId.new ])

Encontra o primeiro documento correspondente usando um bloco.

person.addresses.find { |addr| addr.state == 'CA' }

Parâmetros:

  • *args (Objeto...)

    Vários argumentos.

  • noum: bloco ; verb: bloquear (Proc)

    Bloco opcional a ser aprovado.

Retorna:



259
260
261
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 259

def find(*Args, &noum: bloco ; verb: bloquear)
  critério.find(*Args, &noum: bloco ; verb: bloquear)
end

#in_memory ➤ Array<Document>

Obtenha todos os documentos da associação que estão carregados na memória.

Exemplos:

Obtenha documentos na memória.

relation.in_memory

Retorna:

  • (Array <Document>)

    Os documentos na memória.



291
292
293
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 291

def in_memory
  _target
end

#pop(count = nil) ➤ Documento | Array <Documento>

Remova documentos da associação. Pode ser um único documento ou vários, e persistirá automaticamente as alterações.

Exemplos:

Abra um único documento.

relation.pop

Pop vários documentos.

relation.pop(3)

Parâmetros:

  • contar (Inteiro) (padrão para: nil)

    O número de documentos a serem exibidos ou 1 , se não forem fornecidos.

Retorna:



308
309
310
311
312
313
314
315
316
317
318
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 308

def Pop(contar = nada)
  se contar
    se Docs = _target[_target.Tamanho - contar, _target.Tamanho]
      Docs.cada { |doc| excluir(doc) }
    end
  mais
    excluir(_target[-1])
  end.toque fazer
    update_attributes_hash
  end
end

#shift(count = nil) ➤ Documento | Array <Documento>

Remova documentos da associação. Pode ser um único documento ou vários, e persistirá automaticamente as alterações.

Exemplos:

Deslocar um único documento.

relation.shift

Deslocar vários documentos.

relation.shift(3)

Parâmetros:

  • contar (Inteiro) (padrão para: nil)

    O número de documentos a serem transferidos ou 1 se não forem fornecidos.

Retorna:



333
334
335
336
337
338
339
340
341
342
343
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 333

def mudança(contar = nada)
  se contar
    se _target.Tamanho > 0 && Docs = _target[0, contar]
      Docs.cada { |doc| excluir(doc) }
    end
  mais
    excluir(_target[0])
  end.toque fazer
    update_attributes_hash
  end
end

#replace(Docs) ➤ Muitos

Substitui os documentos de destino fornecidos pelos documentos existentes na relação.

Exemplos:

Substitua a meta da associação.

person.addresses.substitute([ address ])

Parâmetros:

  • Docs (Array <Documento> | Array<Hash>)

    Os Docs substitutos .

Retorna:

  • (Muitos)

    A associação proxy.



354
355
356
357
358
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 354

def substituir(Docs)
  batch_replace(Docs)
  update_attributes_hash
  auto
end

#sem escopoCritérios

Retorne a associação com todos os escopos anteriores removidos. Esta é a representação exata dos Docs no banco de banco de dados.

Exemplos:

Obtenha os documentos sem escopo.

person.addresses.unscoped

Retorna:



367
368
369
370
371
372
# File 'build/mongoid-8.1/lib/mongoid/association/embedded/embeds_many/proxy.rb', linha 367

def sem escopo
  criterion = classe.sem escopo
  criterion.incorporado = true
  criterion.documentos = _unscoped.delete_if(&:marked_for_destruction?)
  criterion
end