module ActiveRecord::Precount::RelationExtension

Public Instance Methods

eager_count(*args) click to toggle source
# File lib/active_record/precount/relation_extension.rb, line 18
def eager_count(*args)
  check_if_method_has_arguments!(:eager_count, args)
  spawn.eager_count!(*args)
end
eager_count!(*args) click to toggle source
# File lib/active_record/precount/relation_extension.rb, line 23
def eager_count!(*args)
  CountLoaderBuilder.new(klass).build_from_query_methods(*args)

  self.eager_load_values += args.map { |arg| :"#{arg}_count" }
  self
end
precount(*args) click to toggle source
# File lib/active_record/precount/relation_extension.rb, line 6
def precount(*args)
  check_if_method_has_arguments!(:precount, args)
  spawn.precount!(*args)
end
precount!(*args) click to toggle source
# File lib/active_record/precount/relation_extension.rb, line 11
def precount!(*args)
  CountLoaderBuilder.new(klass).build_from_query_methods(*args)

  self.preload_values += args.map { |arg| :"#{arg}_count" }
  self
end

Private Instance Methods

apply_join_dependency(relation, join_dependency) click to toggle source
Calls superclass method
# File lib/active_record/precount/relation_extension.rb, line 32
def apply_join_dependency(relation, join_dependency)
  relation = super

  # to count associated records in JOIN query, group scope is necessary
  join_dependency.reflections.each do |reflection|
    if reflection.macro == :count_loader
      ar = reflection.active_record
      relation = relation.group("#{ar.table_name}.#{ar.primary_key}")
    end
  end

  relation
end