diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2017-11-06 06:40:36 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2017-11-06 06:40:36 +0900 |
commit | e0bef22665f93e88f6b2f3ac6bd55543ed0d6343 (patch) | |
tree | 9c36c394d213083d18ef30885b42bdf9500b07bd /activerecord/lib/active_record/associations/preloader | |
parent | e617fb57f5a388d5f0a47fd5e576588dd10066b0 (diff) | |
download | rails-e0bef22665f93e88f6b2f3ac6bd55543ed0d6343.tar.gz rails-e0bef22665f93e88f6b2f3ac6bd55543ed0d6343.tar.bz2 rails-e0bef22665f93e88f6b2f3ac6bd55543ed0d6343.zip |
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]
Diffstat (limited to 'activerecord/lib/active_record/associations/preloader')
-rw-r--r-- | activerecord/lib/active_record/associations/preloader/through_association.rb | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations/preloader/through_association.rb b/activerecord/lib/active_record/associations/preloader/through_association.rb index 5bd49b041a..b16fca7dc9 100644 --- a/activerecord/lib/active_record/associations/preloader/through_association.rb +++ b/activerecord/lib/active_record/associations/preloader/through_association.rb @@ -40,7 +40,11 @@ module ActiveRecord 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 @@ module ActiveRecord rhs_records end end + end.tap do + reset_association(middle_records, source_reflection.name, preload_scope) end end |