diff options
Diffstat (limited to 'activerecord/lib')
| -rw-r--r-- | activerecord/lib/active_record/associations/preloader/through_association.rb | 25 | 
1 files changed, 16 insertions, 9 deletions
diff --git a/activerecord/lib/active_record/associations/preloader/through_association.rb b/activerecord/lib/active_record/associations/preloader/through_association.rb index 08683d3250..17c46a4602 100644 --- a/activerecord/lib/active_record/associations/preloader/through_association.rb +++ b/activerecord/lib/active_record/associations/preloader/through_association.rb @@ -19,21 +19,15 @@ module ActiveRecord                              through_reflection.name,                              through_scope) -          should_reset = (through_scope != through_reflection.klass.unscoped) || -             (reflection.options[:source_type] && through_reflection.collection?) -            through_records = owners.map do |owner, h|              association = owner.association through_reflection.name -            [owner, Array(association.reader), association] +            [owner, Array(association.reader)]            end -          # Dont cache the association - we would only be caching a subset -          if should_reset -            through_records.each { |(_,_,assoc)| assoc.reset } -          end +          reset_association owners, through_reflection.name -          middle_records = through_records.map { |(_,rec,_)| rec }.flatten +          middle_records = through_records.map { |(_,rec)| rec }.flatten            preloaders = preloader.preload(middle_records,                                           source_reflection.name, @@ -68,6 +62,19 @@ module ActiveRecord          private +        def reset_association(owners, association_name) +          should_reset = (through_scope != through_reflection.klass.unscoped) || +             (reflection.options[:source_type] && through_reflection.collection?) + +          # Dont cache the association - we would only be caching a subset +          if should_reset +            owners.each { |owner| +              owner.association(association_name).reset +            } +          end +        end + +          def through_scope            scope = through_reflection.klass.unscoped  | 
