aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/association_preload.rb
diff options
context:
space:
mode:
authorMatt Jones <al2o3cr@gmail.com>2008-12-02 16:21:21 -0500
committerPratik Naik <pratiknaik@gmail.com>2008-12-18 19:19:36 +0000
commita9422cc1db9501a80ecf2c25a5d3b0c4f4f32763 (patch)
tree27f933f524f033434448fd953cf24285c36d007f /activerecord/lib/active_record/association_preload.rb
parent8326b95169ae6af3b81f5596107fef9db4bcbbb0 (diff)
downloadrails-a9422cc1db9501a80ecf2c25a5d3b0c4f4f32763.tar.gz
rails-a9422cc1db9501a80ecf2c25a5d3b0c4f4f32763.tar.bz2
rails-a9422cc1db9501a80ecf2c25a5d3b0c4f4f32763.zip
Fix preloading of has_one :through associations on belongs_to [#1507 state:resolved]
Signed-off-by: Frederick Cheung <frederick.cheung@gmail.com>
Diffstat (limited to 'activerecord/lib/active_record/association_preload.rb')
-rw-r--r--activerecord/lib/active_record/association_preload.rb15
1 files changed, 12 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/association_preload.rb b/activerecord/lib/active_record/association_preload.rb
index d8aa1051bd..7b1b2d9ad9 100644
--- a/activerecord/lib/active_record/association_preload.rb
+++ b/activerecord/lib/active_record/association_preload.rb
@@ -204,9 +204,18 @@ module ActiveRecord
unless through_records.empty?
source = reflection.source_reflection.name
through_records.first.class.preload_associations(through_records, source)
- through_records.each do |through_record|
- add_preloaded_record_to_collection(id_to_record_map[through_record[through_primary_key].to_s],
- reflection.name, through_record.send(source))
+ if through_reflection.macro == :belongs_to
+ rev_id_to_record_map, rev_ids = construct_id_map(records, through_primary_key)
+ rev_primary_key = through_reflection.klass.primary_key
+ through_records.each do |through_record|
+ add_preloaded_record_to_collection(rev_id_to_record_map[through_record[rev_primary_key].to_s],
+ reflection.name, through_record.send(source))
+ end
+ else
+ through_records.each do |through_record|
+ add_preloaded_record_to_collection(id_to_record_map[through_record[through_primary_key].to_s],
+ reflection.name, through_record.send(source))
+ end
end
end
else