Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Always return decimal average of integer fields

In previous version if database adapter (e.g. SQLite and Oracle) returned non-String calculated values then type_cast_using_column converted decimal average value of intefer field to integer value. Now operation parameter is always checked to decide which conversion of calculated value should be done.
  • Loading branch information...
commit e1a064ac3e8ff0fb1d6ad74f3c13ee89aadc8959 1 parent b7e5a64
@rsim rsim authored tenderlove committed
View
14 activerecord/lib/active_record/relation/calculations.rb
@@ -273,15 +273,11 @@ def column_for(field)
end
def type_cast_calculated_value(value, column, operation = nil)
- if value.is_a?(String) || value.nil?
- case operation
- when 'count' then value.to_i
- when 'sum' then type_cast_using_column(value || '0', column)
- when 'average' then value.try(:to_d)
- else type_cast_using_column(value, column)
- end
- else
- type_cast_using_column(value, column)
+ case operation
+ when 'count' then value.to_i
+ when 'sum' then type_cast_using_column(value || '0', column)
+ when 'average' then value.try(:to_d)
+ else type_cast_using_column(value, column)
end
end
View
5 activerecord/test/cases/calculations_test.rb
@@ -23,6 +23,11 @@ def test_should_average_field
assert_equal 53.0, value
end
+ def test_should_return_decimal_average_of_integer_field
+ value = Account.average(:id)
+ assert_equal 3.5, value
+ end
+
def test_should_return_nil_as_average
assert_nil NumericData.average(:bank_balance)
end
Please sign in to comment.
Something went wrong with that request. Please try again.