activerecord sum返回一个字符串?

时间:2010-09-28 10:48:02

标签: ruby-on-rails activerecord

这对我来说似乎很奇怪,一个活跃的记录总和会返回一个字符串,而不是一个数字

basket_items.sum("price")

这似乎使它有效,但我想我可能错过了一些东西,因为这似乎是非常奇怪的行为。

basket_items.sum("price").to_i

3 个答案:

答案 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上:

https://github.com/rails/rails/blob/f8f4ac91203506c94d547ee0ef530bd60faf97ed/activerecord/lib/active_record/relation/calculations.rb#L92

另见Advanced sum() usage in Rails