这对我来说似乎很奇怪,一个活跃的记录总和会返回一个字符串,而不是一个数字
basket_items.sum("price")
这似乎使它有效,但我想我可能错过了一些东西,因为这似乎是非常奇怪的行为。
basket_items.sum("price").to_i
答案 0 :(得分:2)
根据(rails 2.3.9)API:
返回的值与列的数据类型相同,如果没有行,则返回0
您的price
列可以是string
还是text
?
答案 1 :(得分:2)
https://github.com/rails/rails/pull/7439
它返回一个字符串是有原因的 - 在Ruby 1.8中的Fixnum上调用to_d会产生NoMethodError。在Ruby 1.9中不再是这种情况,因此可能无法改变。
答案 2 :(得分:0)
ActiveRecord sum:
差异:
1)basket_items.sum(“价格”)
它也会求和非整数,它将返回非整数类型。
2)basket_items.sum(“price”)。to_i
以上将转换为整数。
# File activerecord/lib/active_record/relation/calculations.rb, line 92
def sum(*args)
if block_given?
self.to_a.sum(*args) {|*block_args| yield(*block_args)}
else
calculate(:sum, *args)
end
end
计算给定列的值之和。返回的值与列的数据类型相同,如果没有行,则返回0。
http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-sum
Github上: