Module: Mongoid::Relations::Eager

Included in:
Contextual::Memory, Contextual::Mongo
Defined in:
lib/mongoid/relations/eager.rb,
lib/mongoid/relations/eager/base.rb,
lib/mongoid/relations/eager/has_one.rb,
lib/mongoid/relations/eager/has_many.rb,
lib/mongoid/relations/eager/belongs_to.rb,
lib/mongoid/relations/eager/has_and_belongs_to_many.rb

Defined Under Namespace

Classes: Base, BelongsTo, HasAndBelongsToMany, HasMany, HasOne

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#eager_loadedObject

Returns the value of attribute eager_loaded.



12
13
14
# File 'lib/mongoid/relations/eager.rb', line 12

def eager_loaded
  @eager_loaded
end

Instance Method Details

#eager_load(docs) ⇒ Object



30
31
32
33
34
# File 'lib/mongoid/relations/eager.rb', line 30

def eager_load(docs)
  return false unless eager_loadable?
  preload(criteria.inclusions, docs)
  self.eager_loaded = true
end

#eager_load_one(doc) ⇒ Object



21
22
23
# File 'lib/mongoid/relations/eager.rb', line 21

def eager_load_one(doc)
  eager_load([doc])
end

#eager_loadable?(document = nil) ⇒ Boolean

Returns:



25
26
27
28
# File 'lib/mongoid/relations/eager.rb', line 25

def eager_loadable?(document = nil)
  return false if criteria.inclusions.empty?
  !eager_loaded
end

#preload(relations, docs) ⇒ Object



36
37
38
39
40
41
42
43
# File 'lib/mongoid/relations/eager.rb', line 36

def preload(relations, docs)

  relations.group_by do ||
    .relation
  end.each do |relation, associations|
    relation.eager_load_klass.new(associations, docs).run
  end
end

#with_eager_loading(document) ⇒ Object



14
15
16
17
18
19
# File 'lib/mongoid/relations/eager.rb', line 14

def with_eager_loading(document)
  return nil unless document
  doc = Factory.from_db(klass, document, criteria.options[:fields])
  eager_load_one(doc)
  doc
end