| Module | ActiveRecord::AssociationPreload::ClassMethods |
| In: |
vendor/rails/activerecord/lib/active_record/association_preload.rb
|
Loads the named associations for the activerecord record (or records) given preload_options is passed only one level deep: don‘t pass to the child associations when associations is a Hash
# File vendor/rails/activerecord/lib/active_record/association_preload.rb, line 12
12: def preload_associations(records, associations, preload_options={})
13: records = [records].flatten.compact.uniq
14: return if records.empty?
15: case associations
16: when Array then associations.each {|association| preload_associations(records, association, preload_options)}
17: when Symbol, String then preload_one_association(records, associations.to_sym, preload_options)
18: when Hash then
19: associations.each do |parent, child|
20: raise "parent must be an association name" unless parent.is_a?(String) || parent.is_a?(Symbol)
21: preload_associations(records, parent, preload_options)
22: reflection = reflections[parent]
23: parents = records.map {|record| record.send(reflection.name)}.flatten
24: unless parents.empty? || parents.first.nil?
25: parents.first.class.preload_associations(parents, child)
26: end
27: end
28: end
29: end