module Mongoid::Relations::Eager

Public Instance Methods

eager_load(docs) click to toggle source
# File lib/mongoid/relations/eager.rb, line 15
def eager_load(docs)
  docs.tap do |d|
    if eager_loadable?
      preload(criteria.inclusions, d)
    end
  end
end
eager_loadable?() click to toggle source
# File lib/mongoid/relations/eager.rb, line 11
def eager_loadable?
  !criteria.inclusions.empty?
end
preload(relations, docs) click to toggle source
# File lib/mongoid/relations/eager.rb, line 23
def preload(relations, docs)
  grouped_relations = relations.group_by do |metadata|
    metadata.inverse_class_name
  end
  grouped_relations.keys.each do |_klass|
    grouped_relations[_klass] = grouped_relations[_klass].group_by do |metadata|
      metadata.relation
    end
  end
  grouped_relations.each do |_klass, associations|
    docs = associations.collect do |_relation, association|
      _relation.eager_load_klass.new(association, docs).run
    end.flatten
  end
end