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
This commit is contained in:
Jeremy Kemper 2008-02-27 22:41:35 +00:00
parent 0d70f31057
commit 558c5ff251
3 changed files with 17 additions and 7 deletions

View File

@ -162,12 +162,13 @@ module ActiveRecord
# 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 File

@ -331,7 +331,7 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
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 @@ class AssociationsJoinModelTest < ActiveRecord::TestCase
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 File

@ -22,4 +22,7 @@ godfather:
tag_id: 1
taggable_id: 1
taggable_type: Item
orphaned:
id: 5
tag_id: 1