Módulo: Mongoid::Copyable
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
-
.clone_with_hash(klass, attrs) ➤ Document
Criar clone de um document do klass fornecido com o hash de atributos fornecidos.
Recolhimento do Resumo do método de instância
-
#clone ➤ Document (também: #dup)
Clone ou duplique o
Documentatual.
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.
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.[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
#clone ⇒ Document 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.
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 |