Sha256: 45052171eeb79a0fd23ee9e2272dce2b3a5f63ab44f0bd49a5f4e1a84a33223a

Contents?: true

Size: 977 Bytes

Versions: 8

Compression:

Stored size: 977 Bytes

Contents

module ActiveRecord
  module Associations
    class Preloader
      class CountLoader < SingularAssociation
        def association_key_name
          reflection.foreign_key
        end

        def owner_key_name
          reflection.active_record_primary_key
        end

        private

        def preload(preloader)
          associated_records_by_owner(preloader).each do |owner, associated_records|
            count = associated_records.count

            association = owner.association(reflection.name)
            association.target = count
          end
        end

        def load_slices(slices)
          @preloaded_records = slices.flat_map { |slice|
            records_for(slice)
          }

          @preloaded_records.map { |record|
            key = record
            [record, key]
          }
        end

        def query_scope(ids)
          scope.where(association_key.in(ids)).pluck(association_key_name)
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 2 rubygems

Version Path
activerecord-precount-0.4.2 lib/active_record/associations/preloader/count_loader.rb
activerecord-precount-0.4.1 lib/active_record/associations/preloader/count_loader.rb
activerecord-precount-0.4.0 lib/active_record/associations/preloader/count_loader.rb
activerecord-count_loader-0.3.3 lib/active_record/associations/preloader/count_loader.rb
activerecord-count_loader-0.3.2 lib/active_record/associations/preloader/count_loader.rb
activerecord-count_loader-0.3.1 lib/active_record/associations/preloader/count_loader.rb
activerecord-count_loader-0.3.0 lib/active_record/associations/preloader/count_loader.rb
activerecord-count_loader-0.2.2 lib/active_record/associations/preloader/count_loader.rb