提交 f4f4964c 编写于 作者: R Raimonds Simanovskis 提交者: Aaron Patterson

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.
上级 06165856
......@@ -282,15 +282,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
......
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册