module Mongoid::Reloadable
This module handles reloading behavior of documents.
@since 4.0.0
Public Instance Methods
Reloads the Document
attributes from the database. If the
document has not been saved then an error will get raised if the
configuration option was set. This can reload root documents or embedded
documents.
@example Reload the document.
person.reload
@raise [ Errors::DocumentNotFound ] If the document was deleted.
@return [ Document ] The document, reloaded.
@since 1.0.0
# File lib/mongoid/reloadable.rb, line 21 def reload if @atomic_selector # Clear atomic_selector cache for sharded clusters. MONGOID-5076 remove_instance_variable('@atomic_selector') end reloaded = _reload if Mongoid.raise_not_found_error && reloaded.empty? raise Errors::DocumentNotFound.new(self.class, _id, _id) end @attributes = reloaded @attributes_before_type_cast = {} changed_attributes.clear reset_readonly apply_defaults reload_relations run_callbacks(:find) unless _find_callbacks.empty? run_callbacks(:initialize) unless _initialize_callbacks.empty? self end
Private Instance Methods
Reload the document, determining if it's embedded or not and what behavior to use.
@example Reload the document.
document._reload
@return [ Hash ] The reloaded attributes.
@since 2.3.2
# File lib/mongoid/reloadable.rb, line 53 def _reload embedded? ? reload_embedded_document : reload_root_document end
Extract only the desired embedded document from the attributes.
@example Extract the embedded document.
document.extract_embedded_attributes(attributes)
@param [ Hash ] attributes The document in the db.
@return [ Hash ] The document's extracted attributes.
@since 2.3.2
# File lib/mongoid/reloadable.rb, line 93 def extract_embedded_attributes(attributes) atomic_position.split(".").inject(attributes) do |attrs, part| attrs = attrs[part =~ /\d/ ? part.to_i : part] attrs end end
Reload the embedded document.
@example Reload the document.
document.reload_embedded_document
@return [ Hash ] The reloaded attributes.
@since 2.3.2
# File lib/mongoid/reloadable.rb, line 77 def reload_embedded_document extract_embedded_attributes({}.merge( collection(_root).find(_root.atomic_selector).read(mode: :primary).first )) end
Reload the root document.
@example Reload the document.
document.reload_root_document
@return [ Hash ] The reloaded attributes.
@since 2.3.2
# File lib/mongoid/reloadable.rb, line 65 def reload_root_document {}.merge(collection.find(atomic_selector, session: _session).read(mode: :primary).first || {}) end