1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Ensure empty has_many :through association preloaded via joins is marked as loaded. Fixes #2054.

This commit is contained in:
Jon Leighton 2011-08-15 16:00:35 +01:00
parent 4c743d9fce
commit 57423d815b
2 changed files with 10 additions and 3 deletions

View file

@ -188,13 +188,12 @@ module ActiveRecord
association = join_part.instantiate(row) unless row[join_part.aliased_primary_key].nil?
set_target_and_inverse(join_part, association, record)
else
return if row[join_part.aliased_primary_key].nil?
association = join_part.instantiate(row)
association = join_part.instantiate(row) unless row[join_part.aliased_primary_key].nil?
case macro
when :has_many, :has_and_belongs_to_many
other = record.association(join_part.reflection.name)
other.loaded!
other.target.push(association)
other.target.push(association) if association
other.set_inverse_instance(association)
when :belongs_to
set_target_and_inverse(join_part, association, record)

View file

@ -813,4 +813,12 @@ class HasManyThroughAssociationsTest < ActiveRecord::TestCase
assert !c.save
end
end
def test_preloading_empty_through_association_via_joins
person = Person.create!(:first_name => "Gaga")
person = Person.where(:id => person.id).where('readers.id = 1 or 1=1').includes(:posts).to_a.first
assert person.posts.loaded?, 'person.posts should be loaded'
assert_equal [], person.posts
end
end