diff --git a/activerecord/lib/active_record/associations/preloader.rb b/activerecord/lib/active_record/associations/preloader.rb index 3ca07498c590e9de03669f07d2d960a86d5abb9d..4ef361fccf29b0c35e7e4f87389f638261bd2a6a 100644 --- a/activerecord/lib/active_record/associations/preloader.rb +++ b/activerecord/lib/active_record/associations/preloader.rb @@ -102,14 +102,14 @@ def preloaders @preloaders = [] else @preloaders = associations.flat_map { |association| - preload(association, records) + preloaders_on association, records } end end private - def preload(association, records) + def preloaders_on(association, records) case association when Hash preloaders_for_hash(association, records) @@ -128,7 +128,9 @@ def preloaders_for_hash(association, records) loaders = preloaders_for_one parent, records recs = loaders.flat_map(&:target_records).uniq - loaders.concat Array.wrap(child).flat_map { |assoc| preload assoc, recs } + loaders.concat Array.wrap(child).flat_map { |assoc| + preloaders_on assoc, recs + } end # Not all records have the same class, so group then preload group on the reflection