Class: ActiveRecord::Calculations::ColumnAliasTracker
    Do not use.  This class is for internal use only.
  
| Relationships & Source Files | |
| Inherits: | Object | 
| Defined in: | activerecord/lib/active_record/relation/calculations.rb | 
Class Method Summary
- .new(connection) ⇒ ColumnAliasTracker constructor
 
Instance Method Summary
- #alias_for(field)
 - 
    
      #column_alias_for(field)  
    
    private
    
Converts the given field to the value that the database adapter returns as a usable column name:
 - #truncate(name) private
 
Constructor Details
    .new(connection)  ⇒ ColumnAliasTracker 
  
# File 'activerecord/lib/active_record/relation/calculations.rb', line 9
def initialize(connection) @connection = connection @aliases = Hash.new(0) end
Instance Method Details
#alias_for(field)
[ GitHub ]# File 'activerecord/lib/active_record/relation/calculations.rb', line 14
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
#column_alias_for(field) (private)
Converts the given field to the value that the database adapter returns as a usable column name:
column_alias_for("users.id")                 # => "users_id"
column_alias_for("sum(id)")                  # => "sum_id"
column_alias_for("count(distinct users.id)") # => "count_distinct_users_id"
column_alias_for("count(*)")                 # => "count_all"
  # File 'activerecord/lib/active_record/relation/calculations.rb', line 35
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
#truncate(name) (private)
[ GitHub ]# File 'activerecord/lib/active_record/relation/calculations.rb', line 44
def truncate(name) name.slice(0, @connection.table_alias_length - 2) end