From 0e57c70baf11a7f0211f78a5282f8ba26fbc17b4 Mon Sep 17 00:00:00 2001 From: Pratik Naik Date: Wed, 31 Mar 2010 12:55:49 +0100 Subject: [PATCH] Dont try to load the record from the db if preloading didn't find anything --- activerecord/lib/active_record/association_preload.rb | 5 +++++ activerecord/test/cases/associations/eager_test.rb | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/activerecord/lib/active_record/association_preload.rb b/activerecord/lib/active_record/association_preload.rb index 3f769e452402e..231064992107c 100644 --- a/activerecord/lib/active_record/association_preload.rb +++ b/activerecord/lib/active_record/association_preload.rb @@ -157,6 +157,11 @@ def set_association_single_records(id_to_record_map, reflection_name, associated association_proxy.__send__(:set_inverse_instance, associated_record, mapped_record) end end + + id_to_record_map.each do |id, records| + next if seen_keys.include?(id.to_s) + records.each {|record| record.send("set_#{reflection_name}_target", nil) } + end end # Given a collection of ActiveRecord objects, constructs a Hash which maps diff --git a/activerecord/test/cases/associations/eager_test.rb b/activerecord/test/cases/associations/eager_test.rb index d23f86b700457..2bc5e3682611e 100644 --- a/activerecord/test/cases/associations/eager_test.rb +++ b/activerecord/test/cases/associations/eager_test.rb @@ -830,5 +830,11 @@ def test_include_has_one_using_primary_key assert_equal expected, firm.account_using_primary_key end end - + + def test_preloading_empty_polymorphic_parent + t = Tagging.create!(:taggable_type => 'Post', :taggable_id => Post.maximum(:id) + 1, :tag => tags(:general)) + + assert_queries(2) { @tagging = Tagging.preload(:taggable).find(t.id) } + assert_no_queries { assert ! @tagging.taggable } + end end