class ActiveRecord::Associations::Preloader::CountLoader

Public Instance Methods

association_key_name() click to toggle source
# File lib/active_record/precount/preloader_extension.rb, line 5
def association_key_name
  reflection.foreign_key
end
owner_key_name() click to toggle source
# File lib/active_record/precount/preloader_extension.rb, line 9
def owner_key_name
  reflection.active_record_primary_key
end

Private Instance Methods

build_scope() click to toggle source
Calls superclass method
# File lib/active_record/precount/preloader_extension.rb, line 31
def build_scope
  super.tap do |scope|
    has_many_reflection = model.reflections[reflection.name.to_s.sub(/_count\z/, '')]
    if has_many_reflection.options[:as]
      scope.where!(klass.table_name => { has_many_reflection.type => model.base_class.sti_name })
    end
  end
end
key_conversion_required?() click to toggle source
# File lib/active_record/precount/preloader_extension.rb, line 15
def key_conversion_required?
  # Are you sure this is always false? But this method is required to map result for polymorphic association.
  false
end
load_records() click to toggle source
# File lib/active_record/precount/preloader_extension.rb, line 41
def load_records
  return {} if owner_keys.empty?

  slices  = owner_keys.each_slice(klass.connection.in_clause_length || owner_keys.size)
  @preloaded_records = slices.flat_map { |slice|
    records_for(slice)
  }

  Hash[@preloaded_records.first.map { |key, count| [key, [count]] }]
end
load_slices(slices) click to toggle source
# File lib/active_record/precount/preloader_extension.rb, line 52
def load_slices(slices)
  @preloaded_records = slices.flat_map { |slice|
    records_for(slice)
  }

  @preloaded_records.first.map { |key, count|
    [count, key]
  }
end
preload(preloader) click to toggle source
# File lib/active_record/precount/preloader_extension.rb, line 20
def preload(preloader)
  associated_records_by_owner(preloader).each do |owner, associated_records|
    owner.association(reflection.name).target = associated_records.first.to_i
  end
end
records_for(ids) click to toggle source
# File lib/active_record/precount/preloader_extension.rb, line 26
def records_for(ids)
  key = model.reflections[reflection.name.to_s.sub(/_count\z/, '')].foreign_key
  scope.reorder(nil).where(key => ids).group(key).count(key)
end