Class: Mongoid::Association::Referenced::BelongsTo::Eager
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
| Class Chain: | |
| Instance Chain: | |
| Inherits: | Mongoid::Association::Eager 
 | 
| Defined in: | lib/mongoid/association/referenced/belongs_to/eager.rb | 
Overview
Eager class for belongs_to associations.
Class Method Summary
::Mongoid::Association::Eager - Inherited
| .new | Instantiate the eager load class. | 
Instance Method Summary
- 
    
      #each_loaded_document(&block)  
    
    private
    Retrieves the documents referenced by the association, and yields each one sequentially to the provided block. 
- #group_by_key private
- #key private
- 
    
      #keys_by_type_from_docs  
    
    private
    Returns a map from association target class name to foreign key values for the documents of that association target class, as referenced by this association. 
- #preload private
::Mongoid::Association::Eager - Inherited
| #run | Run the preloader. | 
| #each_loaded_document_of_class | Retrieves the documents of the specified class, that have the foreign key included in the specified list of keys. | 
| #shift_association | Shift the current association metadata. | 
Constructor Details
This class inherits a constructor from Mongoid::Association::Eager
Instance Method Details
#each_loaded_document(&block) (private)
Retrieves the documents referenced by the association, and yields each one sequentially to the provided block. If the association is not polymorphic, all documents are retrieved in a single query. If the association is polymorphic, one query is issued per association target class.
# File 'lib/mongoid/association/referenced/belongs_to/eager.rb', line 30
def each_loaded_document(&block) if @association.polymorphic? keys_by_type_from_docs.each do |type, keys| each_loaded_document_of_class(Object.const_get(type), keys, &block) end else super end end
#group_by_key (private)
[ GitHub ]# File 'lib/mongoid/association/referenced/belongs_to/eager.rb', line 63
def group_by_key @association.foreign_key end
#key (private)
[ GitHub ]# File 'lib/mongoid/association/referenced/belongs_to/eager.rb', line 67
def key @association.primary_key end
#keys_by_type_from_docs (private)
Returns a map from association target class name to foreign key values for the documents of that association target class, as referenced by this association.
# File 'lib/mongoid/association/referenced/belongs_to/eager.rb', line 43
def keys_by_type_from_docs inverse_type_field = @association.inverse_type @docs.each_with_object({}) do |doc, keys_by_type| next unless doc.respond_to?(inverse_type_field) && doc.respond_to?(group_by_key) inverse_type_name = doc.send(inverse_type_field) # If a particular document does not have a value for this # association, inverse_type_name will be nil. next if inverse_type_name.nil? key_value = doc.send(group_by_key) # If a document has the *_type field set but the corresponding # *_id field not set, the key value here will be nil. next unless key_value keys_by_type[inverse_type_name] ||= [] keys_by_type[inverse_type_name].push(key_value) end end
#preload (private)
[ GitHub ]# File 'lib/mongoid/association/referenced/belongs_to/eager.rb', line 14
def preload @docs.each do |d| set_relation(d, nil) end each_loaded_document do |doc| id = doc.send(key) set_on_parent(id, doc) end end