class ActiveRecord::Calculations::ColumnAliasTracker
:nodoc:
def alias_for(field)
def alias_for(field) aliased_name = column_alias_for(field) if @aliases[aliased_name] == 0 @aliases[aliased_name] = 1 aliased_name else # Update the count count = @aliases[aliased_name] += 1 "#{truncate(aliased_name)}_#{count}" end end
def column_alias_for(field)
column_alias_for("count(distinct users.id)") # => "count_distinct_users_id"
column_alias_for("sum(id)") # => "sum_id"
column_alias_for("users.id") # => "users_id"
a usable column name:
Converts the given field to the value that the database adapter returns as
def column_alias_for(field) column_alias = +field column_alias.gsub!(/\*/, "all") column_alias.gsub!(/\W+/, " ") column_alias.strip! column_alias.gsub!(/ +/, "_") @connection.table_alias_for(column_alias) end
def initialize(connection)
def initialize(connection) @connection = connection @aliases = Hash.new(0) end
def truncate(name)
def truncate(name) name.slice(0, @connection.table_alias_length - 2) end