From df15d369706becebf1cff9caf2f4b878948dfc21 Mon Sep 17 00:00:00 2001 From: John Hawthorn Date: Wed, 24 Mar 2021 11:25:19 -0700 Subject: [PATCH] Simplify and memoize polymorphic? --- .../associations/preloader/branch.rb | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/activerecord/lib/active_record/associations/preloader/branch.rb b/activerecord/lib/active_record/associations/preloader/branch.rb index ebb9d37a7d..bf1d077cfc 100644 --- a/activerecord/lib/active_record/associations/preloader/branch.rb +++ b/activerecord/lib/active_record/associations/preloader/branch.rb @@ -39,9 +39,10 @@ module ActiveRecord def grouped_records h = {} + polymorphic_parent = !root? && parent.polymorphic? source_records.each do |record| reflection = record.class._reflect_on_association(association) - next if polymorphic_parent? && !reflection || !record.association(association).klass + next if polymorphic_parent && !reflection || !record.association(association).klass (h[reflection] ||= []) << record end h @@ -53,17 +54,13 @@ module ActiveRecord end end - def polymorphic_parent? - return false if root? - - parent.polymorphic? - end - def polymorphic? return false if root? + return @polymorphic if defined?(@polymorphic) - grouped_records.keys.any? do |reflection| - reflection.options[:polymorphic] + @polymorphic = source_records.any? do |record| + reflection = record.class._reflect_on_association(association) + reflection && reflection.options[:polymorphic] end end