Módulo: Mongoid::Copyable

Estendido por:
ActiveSupport::Concern
Incluído em:
Componível
Definido em:
lib/mongoid/copyable.rb

Visão geral

Este módulo contém o comportamento do clone/dup de documentos do Mongoid.

Recolhimento do Resumo do método de classe

Recolhimento do Resumo do método de instância

Detalhes do método de classe

.clone_with_hash(klass, attrs) ➤ Document

Criar clone de um document do klass fornecido com o hash de atributos fornecidos. Isso é usado recursivamente para que associações incorporadas sejam clonadas com segurança.

Parâmetros:

  • classe (Classe)

    A classe do document a ser criado.

  • attrs (Hash)

    O hash dos atributos.

Retorna:



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# Arquivo 'lib/mongoid/copyable.rb', linha 42

def auto.clone_with_hash(classe, attrs)
  dynamic_attrs = {}
  _attribute_names = classe.Atributo_nomes
  attrs.rejeitar! fazer |attr_name, valor|
    a menos que _attribute_names.incluir?(attr_name)
      dynamic_attrs[attr_name] = valor
      true
    end
  end

  Factory.COMPILAR(classe, attrs).toque fazer |objeto|
    dynamic_attrs.cada fazer |attr_name, valor|
      assoc = objeto.embedded_relations[attr_name]
      se assoc&.um? && valor.is_a?(Hash)
        objeto.enviar("#{attr_name}=", clone_with_hash(assoc.classe, valor))
      elsif assoc&.muitos? && valor.is_a?(Array)
        Docs = valor.map { |H| clone_with_hash(assoc.classe, H) }
        objeto.enviar("#{attr_name}=", Docs)
      elsif objeto.respond_to?("#{attr_name}=")
        objeto.enviar("#{attr_name}=", valor)
      mais
        objeto.attributes[attr_name] = valor
      end
    end
  end
end

Detalhes do método de instância

#cloneDocument Também conhecido como: dup

Clone ou duplique o Document atual. Isso retornará todos os atributos com exceção do ID do documento e redefinirá todas as variáveis de instância.

Este clone também inclui documentos incorporados. Se houver um campo _id no documento incorporado, ele será mantido, ao contrário do _id da raiz.

Se estiver clonando um filho incorporado, o pai incorporado não será clonado e a associação embedded_in não será definida.

Exemplos:

Clone o documento.

document.clone

Retorna:



22
23
24
25
26
27
28
29
# Arquivo 'lib/mongoid/copyable.rb', linha 22

def clonar
  # @note Esta próxima linha está aqui para abordar #2704, embora tenha um
  # _id e campo ID no documento causaria problemas com o Mongoid
  # em outro lugar. Observe que isso só é feito no documento raiz, pois queremos
  # para manter o mesmo _id nos documentos incorporados.
  attrs = clone_document.exceto(*auto.classe.id_fields)
  Copiável.clone_with_hash(auto.classe, attrs)
end