Módulo: Mongoid::Copiable
Overview
Este módulo contiene el comportamiento de clonación / duplicación de document de Mongoid.
Resumen del método de clase colapsar
-
.clone_with_hash(klass, attrs) ⇒ Document
Crear un clon de un document de la clase dada con el hash de atributos proporcionado.
Resumen del método de instancia colapsar
-
#clone ⇒ Documento (también: #dup)
Clonar o duplicar el
Documentactual.
Detalles del método de clase
.clone_with_hash(klass, attrs) ⇒ Document
Crea un clon de un document de la clase dada con el hash de atributos dado. Esto se utiliza de forma recursiva para que las asociaciones incorporadas se clonen de forma segura.
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 |
# Archivo 'lib/mongoid/copyable.rb', línea 42 def sí mismo.clone_with_hash(klass, attrs) dynamic_attrs = {} _attribute_names = klass.attribute_names attrs.¡rechazar! hacer |attr_name, Valor| a menos que _attribute_names.incluir?(attr_name) dynamic_attrs[attr_name] = Valor true end end Fábrica.compilar(klass, attrs).tocar hacer |Objeto| dynamic_attrs.cada hacer |attr_name, Valor| assoc = Objeto.[attr_name] si assoc&.¿uno? && Valor.is_a?(encriptada) Objeto.enviar("#{attr_name}=", clone_with_hash(assoc.klass, Valor)) elsif assoc&.¿muchos? && Valor.is_a?(Arreglo) docs = Valor.map { |h| clone_with_hash(assoc.klass, h) } Objeto.enviar("#{attr_name}=", docs) elsif Objeto.respond_to?("#{attr_name}=") Objeto.enviar("#{attr_name}=", Valor) else Objeto.atributos[attr_name] = Valor end end end end |
Detalles del método de instancia
#clone ⇒ Documento También conocido como: duplicar
Clona o duplica el Document actual. Esto devolverá todos los atributos con la excepción del ID del document, y restablecerá todas las variables de instancia.
Este clon también incluye documentos incrustados. Si hay un campo _id en el documento incrustado, se mantendrá, a diferencia del _id de la raíz.
Si se clona un hijo embebido, el padre embebido no se clona y la asociación embedded_in no se configura.
22 23 24 25 26 27 28 29 |
# Archivo 'lib/mongoid/copyable.rb', línea 22 def clonar # @note Esta siguiente línea se encuentra aquí para abordar #2704, aunque tener un # El campo _id y id en el documento causarían problemas con Mongoid # en otro lugar. Tenga en cuenta que esto solo se realiza en el documento raíz, como queremos # para mantener el mismo _id en los documentos incrustados. attrs = clonar_documento.excepto(*sí mismo.clase.id_fields) Copiable.clone_with_hash(sí mismo.clase, attrs) end |