run(preloader)
public

No documentation available.

# File activerecord/lib/active_record/associations/preloader/through_association.rb, line 7
        def run(preloader)
          already_loaded     = owners.first.association(through_reflection.name).loaded?
          through_scope      = through_scope()
          reflection_scope   = target_reflection_scope
          through_preloaders = preloader.preload(owners, through_reflection.name, through_scope)
          middle_records     = through_preloaders.flat_map(&:preloaded_records)
          preloaders         = preloader.preload(middle_records, source_reflection.name, reflection_scope)
          @preloaded_records = preloaders.flat_map(&:preloaded_records)

          owners.each do |owner|
            through_records = Array(owner.association(through_reflection.name).target)
            if already_loaded
              if source_type = reflection.options[:source_type]
                through_records = through_records.select do |record|
                  record[reflection.foreign_type] == source_type
                end
              end
            else
              owner.association(through_reflection.name).reset if through_scope
            end
            result = through_records.flat_map do |record|
              association = record.association(source_reflection.name)
              target = association.target
              association.reset if preload_scope
              target
            end
            result.compact!
            if reflection_scope
              result.sort_by! { |rhs| preload_index[rhs] } if reflection_scope.order_values.any?
              result.uniq! if reflection_scope.distinct_value
            end
            associate_records_to_owner(owner, result)
          end
        end