diff options
author | Matt Jones <al2o3cr@gmail.com> | 2008-12-02 16:21:21 -0500 |
---|---|---|
committer | Pratik Naik <pratiknaik@gmail.com> | 2008-12-18 19:19:36 +0000 |
commit | a9422cc1db9501a80ecf2c25a5d3b0c4f4f32763 (patch) | |
tree | 27f933f524f033434448fd953cf24285c36d007f /activerecord/lib/active_record | |
parent | 8326b95169ae6af3b81f5596107fef9db4bcbbb0 (diff) | |
download | rails-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')
-rw-r--r-- | activerecord/lib/active_record/association_preload.rb | 15 | ||||
-rw-r--r-- | activerecord/lib/active_record/associations/association_collection.rb | 6 |
2 files changed, 17 insertions, 4 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 diff --git a/activerecord/lib/active_record/associations/association_collection.rb b/activerecord/lib/active_record/associations/association_collection.rb index 0ff91fbdf8..0fefec1216 100644 --- a/activerecord/lib/active_record/associations/association_collection.rb +++ b/activerecord/lib/active_record/associations/association_collection.rb @@ -83,7 +83,11 @@ module ActiveRecord def to_ary load_target - @target.to_ary + if @target.is_a?(Array) + @target.to_ary + else + Array(@target) + end end def reset |