提交 e0bef226 编写于 作者: R Ryuta Kamizono

Fix preloading polymorphic multi-level through association

This is partially fixed by e617fb57 when through association has already
loaded. Otherwise, second level through association should respect
`preload_scope`.

Fixes #30242.
Closes #30076.

[Ryuta Kamizono & CicholGricenchos]
上级 e617fb57
......@@ -40,7 +40,11 @@ def associated_records_by_owner(preloader)
middle_records = through_records.flat_map(&:last)
reflection_scope = reflection_scope() if reflection.scope
if preload_scope
reflection_scope = reflection_scope().merge(preload_scope)
elsif reflection.scope
reflection_scope = reflection_scope()
end
preloaders = preloader.preload(middle_records,
source_reflection.name,
......@@ -70,6 +74,8 @@ def associated_records_by_owner(preloader)
rhs_records
end
end
end.tap do
reset_association(middle_records, source_reflection.name, preload_scope)
end
end
......
......@@ -579,6 +579,17 @@ def test_nested_has_many_through_should_not_be_autosaved
assert !c.post_taggings.empty?
end
def test_polymorphic_has_many_through_when_through_association_has_not_loaded
cake_designer = CakeDesigner.create!(chef: Chef.new)
drink_designer = DrinkDesigner.create!(chef: Chef.new)
department = Department.create!(chefs: [cake_designer.chef, drink_designer.chef])
Hotel.create!(departments: [department])
hotel = Hotel.includes(:cake_designers, :drink_designers).take
assert_equal [cake_designer], hotel.cake_designers
assert_equal [drink_designer], hotel.drink_designers
end
def test_polymorphic_has_many_through_when_through_association_has_already_loaded
cake_designer = CakeDesigner.create!(chef: Chef.new)
drink_designer = DrinkDesigner.create!(chef: Chef.new)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册