module ActiveRecord::Calculations

Public Instance Methods

distinct_value() click to toggle source
# File lib/left_joins_for_rails_3.rb, line 13
def distinct_value
  uniq_value
end
distinct_value=(v) click to toggle source
# File lib/left_joins_for_rails_3.rb, line 17
def distinct_value=(v)
  self.uniq_value = v
end
perform_calculation(operation, column_name, options = {}) click to toggle source

This method is copied from activerecord-4.2.10/lib/active_record/relation/calculations.rb and modified this line `distinct = true` to `distinct = true if distinct == nil`

# File lib/left_joins.rb, line 98
def perform_calculation(operation, column_name, options = {})
  # TODO: Remove options argument as soon we remove support to
  # activerecord-deprecated_finders.
  operation = operation.to_s.downcase

  # If #count is used with #distinct / #uniq it is considered distinct. (eg. relation.distinct.count)
  distinct = options[:distinct] || self.distinct_value

  if operation == "count"
    column_name ||= (select_for_count || :all)

    unless arel.ast.grep(Arel::Nodes::OuterJoin).empty?
      distinct = true if distinct == nil
    end

    column_name = primary_key if column_name == :all && distinct
    distinct = nil if column_name =~ /\s*DISTINCT[\s(]+/i
  end

  if group_values.any?
    execute_grouped_calculation(operation, column_name, distinct)
  else
    execute_simple_calculation(operation, column_name, distinct)
  end
end