diff options
Diffstat (limited to 'activerecord/lib/active_record/association_preload.rb')
-rw-r--r-- | activerecord/lib/active_record/association_preload.rb | 30 |
1 files changed, 4 insertions, 26 deletions
diff --git a/activerecord/lib/active_record/association_preload.rb b/activerecord/lib/active_record/association_preload.rb index 0f96ee95d5..c38b98258a 100644 --- a/activerecord/lib/active_record/association_preload.rb +++ b/activerecord/lib/active_record/association_preload.rb @@ -4,28 +4,6 @@ module ActiveRecord base.extend(ClassMethods) end - class HasManyAssociationStrategy - def initialize(through_reflection) - @through_reflection = through_reflection - end - - def primary_key - if @through_reflection && @through_reflection.macro == :belongs_to - @through_reflection.klass.primary_key - else - @through_reflection.primary_key_name - end - end - - def primary_key_name - if @through_reflection && @through_reflection.macro == :belongs_to - @through_reflection.primary_key_name - else - nil - end - end - end - module ClassMethods # Loads the named associations for the activerecord record (or records) given @@ -153,9 +131,9 @@ module ActiveRecord def preload_has_many_association(records, reflection, preload_options={}) options = reflection.options - through_reflection = reflections[options[:through]] - strat = HasManyAssociationStrategy.new(through_reflection) - id_to_record_map, ids = construct_id_map(records, strat.primary_key_name) + + primary_key_name = reflection.through_reflection_primary_key_name + id_to_record_map, ids = construct_id_map(records, primary_key_name) records.each {|record| record.send(reflection.name).loaded} if options[:through] @@ -165,7 +143,7 @@ module ActiveRecord source = reflection.source_reflection.name through_records.first.class.preload_associations(through_records, source, options) through_records.each do |through_record| - through_record_id = through_record[strat.primary_key].to_s + through_record_id = through_record[reflection.through_reflection_primary_key].to_s add_preloaded_records_to_collection(id_to_record_map[through_record_id], reflection.name, through_record.send(source)) end end |