aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorCarlos Antonio da Silva <carlosantoniodasilva@gmail.com>2012-06-25 17:36:24 -0300
committerCarlos Antonio da Silva <carlosantoniodasilva@gmail.com>2012-06-25 18:35:53 -0300
commitf8f4ac91203506c94d547ee0ef530bd60faf97ed (patch)
treea19da39a9d3add46aad8ca3f0ff8d807d2676ad2 /activerecord
parent12ac97707997f11ebda9d7527aaff14d079a2460 (diff)
downloadrails-f8f4ac91203506c94d547ee0ef530bd60faf97ed.tar.gz
rails-f8f4ac91203506c94d547ee0ef530bd60faf97ed.tar.bz2
rails-f8f4ac91203506c94d547ee0ef530bd60faf97ed.zip
Ensure Arel columns are typecasted properly when grouping with calculation
Fix build issue with postgresql. Conflicts: activerecord/lib/active_record/relation/calculations.rb activerecord/test/cases/calculations_test.rb
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/relation/calculations.rb6
-rw-r--r--activerecord/test/cases/calculations_test.rb8
2 files changed, 9 insertions, 5 deletions
diff --git a/activerecord/lib/active_record/relation/calculations.rb b/activerecord/lib/active_record/relation/calculations.rb
index 42ee4961c0..802059db21 100644
--- a/activerecord/lib/active_record/relation/calculations.rb
+++ b/activerecord/lib/active_record/relation/calculations.rb
@@ -295,10 +295,10 @@ module ActiveRecord
end
ActiveSupport::OrderedHash[calculated_data.map do |row|
- key = group_columns.map { |aliaz, column|
+ key = group_columns.map { |aliaz, column|
type_cast_calculated_value(row[aliaz], column)
}
- key = key.first if key.size == 1
+ key = key.first if key.size == 1
key = key_records[key] if associated
[key, type_cast_calculated_value(row[aggregate_alias], column_for(column_name), operation)]
end]
@@ -325,7 +325,7 @@ module ActiveRecord
end
def column_for(field)
- field_name = field.to_s.split('.').last
+ field_name = field.respond_to?(:name) ? field.name.to_s : field.to_s.split('.').last
@klass.columns.detect { |c| c.name.to_s == field_name }
end
diff --git a/activerecord/test/cases/calculations_test.rb b/activerecord/test/cases/calculations_test.rb
index e50de46f9e..cf1181e829 100644
--- a/activerecord/test/cases/calculations_test.rb
+++ b/activerecord/test/cases/calculations_test.rb
@@ -64,12 +64,16 @@ class CalculationsTest < ActiveRecord::TestCase
def test_should_group_by_field
c = Account.sum(:credit_limit, :group => :firm_id)
- [1,6,2].each { |firm_id| assert c.keys.include?(firm_id) }
+ [1,6,2].each do |firm_id|
+ assert c.keys.include?(firm_id), "Group #{c.inspect} does not contain firm_id #{firm_id}"
+ end
end
def test_should_group_by_arel_attribute
c = Account.sum(:credit_limit, :group => Account.arel_table[:firm_id])
- [1,6,2].each { |firm_id| assert c.keys.include?(firm_id) }
+ [1,6,2].each do |firm_id|
+ assert c.keys.include?(firm_id), "Group #{c.inspect} does not contain firm_id #{firm_id}"
+ end
end
def test_should_group_by_multiple_fields