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:
parent
4c743d9fce
commit
57423d815b
2 changed files with 10 additions and 3 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue