diff --git a/activerecord/lib/active_record/associations/preloader/through_association.rb b/activerecord/lib/active_record/associations/preloader/through_association.rb index 63d4253e6a6d782d1f35baf7c307c7fa7745961f..edce1d80c5b4d47b5a09489dffca0ccacb3c7ed3 100644 --- a/activerecord/lib/active_record/associations/preloader/through_association.rb +++ b/activerecord/lib/active_record/associations/preloader/through_association.rb @@ -29,6 +29,8 @@ def associated_records_by_owner(preloader) source_reflection.name, reflection_scope) + @preloaded_records.concat preloaders.flat_map(&:preloaded_records) + middle_to_pl = preloaders.each_with_object({}) do |pl,h| pl.owners.each { |middle| h[middle] = pl @@ -53,9 +55,7 @@ def associated_records_by_owner(preloader) }.compact record_index = pl_indexes[pl] - records = rhs_records.sort_by { |rhs| record_index[rhs] } - @preloaded_records.concat rhs_records - records + rhs_records.sort_by { |rhs| record_index[rhs] } end } end