mirror of
https://github.com/github/rails.git
synced 2026-01-30 00:38:00 -05:00
Ensure Associations#sum returns 0 when no rows are returned. [#295 state:resolved]
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
This commit is contained in:
committed by
Pratik Naik
parent
a980eb8c77
commit
4210d85a3f
@@ -71,7 +71,7 @@ module ActiveRecord
|
||||
#
|
||||
# Person.sum('age')
|
||||
def sum(column_name, options = {})
|
||||
calculate(:sum, column_name, options) || 0
|
||||
calculate(:sum, column_name, options)
|
||||
end
|
||||
|
||||
# This calculates aggregate values in the given column. Methods for count, sum, average, minimum, and maximum have been added as shortcuts.
|
||||
@@ -265,8 +265,8 @@ module ActiveRecord
|
||||
def type_cast_calculated_value(value, column, operation = nil)
|
||||
operation = operation.to_s.downcase
|
||||
case operation
|
||||
when 'count' then value.to_i
|
||||
when 'avg' then value && value.to_f
|
||||
when 'count', 'sum' then value.to_i
|
||||
when 'avg' then value && value.to_f
|
||||
else column ? column.type_cast(value) : value
|
||||
end
|
||||
end
|
||||
|
||||
@@ -99,6 +99,7 @@ class CalculationsTest < ActiveRecord::TestCase
|
||||
|
||||
def test_should_return_zero_if_sum_conditions_return_nothing
|
||||
assert_equal 0, Account.sum(:credit_limit, :conditions => '1 = 2')
|
||||
assert_equal 0, companies(:rails_core).companies.sum(:id, :conditions => '1 = 2')
|
||||
end
|
||||
|
||||
def test_should_group_by_summed_field_with_conditions
|
||||
@@ -266,6 +267,6 @@ class CalculationsTest < ActiveRecord::TestCase
|
||||
end
|
||||
|
||||
def test_should_sum_expression
|
||||
assert_equal "636", Account.sum("2 * credit_limit")
|
||||
assert_equal 636, Account.sum("2 * credit_limit")
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user