module Mongoid::Reloadable

This module handles reloading behavior of documents.

@since 4.0.0

Public Instance Methods

reload() click to toggle source

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 23
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() click to toggle source

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 55
def _reload
  embedded? ? reload_embedded_document : reload_root_document
end
extract_embedded_attributes(attributes) click to toggle source

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 95
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_embedded_document() click to toggle source

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 79
def reload_embedded_document
  extract_embedded_attributes({}.merge(
    collection(_root).find(_root.atomic_selector).read(mode: :primary).first
  ))
end
reload_root_document() click to toggle source

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 67
def reload_root_document
  {}.merge(collection.find(atomic_selector, session: _session).read(mode: :primary).first || {})
end