mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Fixed AR::Relation#sum compatibility with Array#sum
In order make Relation behavior closer to Array Made Relation#sum to accept block and delegate it to Array#sum
This commit is contained in:
parent
289b5253ce
commit
e7bec4e435
2 changed files with 10 additions and 2 deletions
|
@ -89,8 +89,12 @@ module ActiveRecord
|
|||
# +calculate+ for examples with options.
|
||||
#
|
||||
# Person.sum('age') # => 4562
|
||||
def sum(column_name, options = {})
|
||||
calculate(:sum, column_name, options)
|
||||
def sum(*args)
|
||||
if block_given?
|
||||
self.to_a.sum(*args) {|*block_args| yield(*block_args)}
|
||||
else
|
||||
calculate(:sum, *args)
|
||||
end
|
||||
end
|
||||
|
||||
# This calculates aggregate values in the given column. Methods for count, sum, average,
|
||||
|
|
|
@ -397,6 +397,10 @@ class CalculationsTest < ActiveRecord::TestCase
|
|||
Account.sum(:credit_limit, :from => 'accounts', :conditions => "credit_limit > 50")
|
||||
end
|
||||
|
||||
def test_sum_array_compatibility
|
||||
assert_equal Account.sum(:credit_limit), Account.sum(&:credit_limit)
|
||||
end
|
||||
|
||||
def test_average_with_from_option
|
||||
assert_equal Account.average(:credit_limit), Account.average(:credit_limit, :from => 'accounts')
|
||||
assert_equal Account.average(:credit_limit, :conditions => "credit_limit > 50"),
|
||||
|
|
Loading…
Reference in a new issue