Calculates the sum of
values on a given column. The value is returned with the same data type of
the column, 0 if there’s no row. See #calculate for
examples with options.
# File activerecord/lib/active_record/relation/calculations.rb, line 86
def sum(identity_or_column = nil, &block)
if block_given?
values = map(&block)
if identity_or_column.nil? && (values.first.is_a?(Numeric) || values.first(1) == [])
identity_or_column = 0
end
if identity_or_column.nil?
ActiveSupport::Deprecation.warn( Rails 7.0 has deprecated Enumerable.sum in favor of Ruby's native implementation available since 2.4. Sum of non-numeric elements requires an initial argument..squish)
values.inject(:+) || 0
else
values.sum(identity_or_column)
end
else
calculate(:sum, identity_or_column)
end
end