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