This module contains the behaviour of Mongoid's clone/dup of documents.
Clone or dup the current Document
. This will return all
attributes with the exception of the document's id and versions, and
will reset all the instance variables.
This clone also includes embedded documents.
@example Clone the document.
document.clone
@param [ Document ] other The document getting cloned.
@return [ Document ] The new document.
# File lib/mongoid/copyable.rb, line 19 def clone # @note This next line is here to address #2704, even though having an # _id and id field in the document would cause problems with Mongoid # elsewhere. attrs = clone_document.except("_id", "id") self.class.new(attrs, without_protection: true) end
Clone the document attributes
@api private
@example clone document
model.clone_document
@param [ Hash ] dcoument The document with hash format
@since 3.0.22
# File lib/mongoid/copyable.rb, line 40 def clone_document attrs = as_document.__deep_copy__ attrs["version"] = 1 if attrs.delete("versions") process_localized_attributes(attrs) attrs end
When cloning, if the document has localized fields we need to ensure they are properly processed in the clone.
@api private
@example Process localized attributes.
model.process_localized_attributes(attributes)
@param [ Hash ] attrs The attributes.
@since 3.0.20
# File lib/mongoid/copyable.rb, line 58 def process_localized_attributes(attrs) localized_fields.keys.each do |name| if value = attrs.delete(name) attrs["#{name}_translations"] = value end end end