Permalink
Browse files

Fix preloading nil polymorphic belongs_to. Closes #11218 [matrix9180]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8933 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
1 parent 0d70f31 commit 558c5ff251fa790cd0d623468cc0e45d7efa45ed @jeremy jeremy committed Feb 27, 2008
View
11 activerecord/lib/active_record/association_preload.rb
@@ -162,12 +162,13 @@ def preload_belongs_to_association(records, reflection, preload_options={})
# Construct a mapping from klass to a list of ids to load and a mapping of those ids back to their parent_records
records.each do |record|
- klass = record.send(polymorph_type)
- klass_id = record.send(primary_key_name)
+ if klass = record.send(polymorph_type)
+ klass_id = record.send(primary_key_name)
- id_map = klasses_and_ids[klass] ||= {}
- id_list_for_klass_id = (id_map[klass_id] ||= [])
- id_list_for_klass_id << record
+ id_map = klasses_and_ids[klass] ||= {}
+ id_list_for_klass_id = (id_map[klass_id] ||= [])
+ id_list_for_klass_id << record
+ end
end
klasses_and_ids = klasses_and_ids.to_a
else
View
8 activerecord/test/cases/associations/join_model_test.rb
@@ -331,7 +331,7 @@ def test_eager_has_many_polymorphic_with_source_type
assert_no_queries do
assert_equal desired, tag_with_include.tagged_posts
end
- assert_equal 4, tag_with_include.taggings.length
+ assert_equal 5, tag_with_include.taggings.length
end
def test_has_many_through_has_many_find_all
@@ -589,6 +589,12 @@ def test_preload_polymorph_many_types
assert taggables.include?(posts(:welcome))
end
+ def test_preload_nil_polymorphic_belongs_to
+ assert_nothing_raised do
+ taggings = Tagging.find(:all, :include => :taggable, :conditions => ['taggable_type IS NULL'])
+ end
+ end
+
def test_preload_polymorphic_has_many
posts = Post.find(:all, :order => 'posts.id')
posts_with_taggings = Post.find(:all, :include => :taggings, :order => 'posts.id')
View
5 activerecord/test/fixtures/taggings.yml
@@ -22,4 +22,7 @@ godfather:
tag_id: 1
taggable_id: 1
taggable_type: Item
-
+
+orphaned:
+ id: 5
+ tag_id: 1

0 comments on commit 558c5ff

Please sign in to comment.