当我试图做一个条件并总结我的其他专栏
时,我收到了一个错误@dolars =Policy.find(:all ,:conditions=>"type_money = '1' ").sum(&:amount_ensure)
我的表
Policies
|id| |type_money| |amount_ensure|
integer integer integer
我的日志显示了这个
nil can't be coerced into Fixnum
.rvm/gems/ruby-1.8.7-p370/gems/activesupport-2.3.5/lib/active_support/whiny_nil.rb:52:in `+'
.rvm/gems/ruby-1.8.7-p370/gems/activesupport-2.3.5/lib/active_support/core_ext/enumerable.rb:61:in `sum'
.rvm/gems/ruby-1.8.7-p370/gems/activerecord-2.3.5/lib/active_record/attribute_methods.rb:211:in `inject'
.rvm/gems/ruby-1.8.7-p370/gems/activesupport-2.3.5/lib/active_support/core_ext/enumerable.rb:61:in `each'
.rvm/gems/ruby-1.8.7-p370/gems/activesupport-2.3.5/lib/active_support/core_ext/enumerable.rb:61:in `inject'
.rvm/gems/ruby-1.8.7-p370/gems/activesupport-2.3.5/lib/active_support/core_ext/enumerable.rb:61:in `sum'
.rvm/gems/ruby-1.8.7-p370/gems/activesupport-2.3.5/lib/active_support/core_ext/enumerable.rb:59:in `sum'
我正在尝试这样做:
SELECT id, SUM(amount_ensure) As dolars,type_money
FROM Policies
WHERE type_money= "1"
我的控制器中的代码应该可以工作,但我不知道发生了什么
有人可以帮帮我吗?我将非常感谢所有的帮助答案 0 :(得分:2)
使用此
@dolars = Policy.sum(:amount_ensure ,:conditions=>"type_money = '1' ")
以上查询在sql本身执行求和
在sum
之后调用find
时,它会对从查询中提取的记录求和。
答案 1 :(得分:1)
某个地方nil
的值为#amount_ensure
。
也许这会在irb
:
2.0.0p195 :001 > [1,2,3,4,nil].reduce(&:+)
TypeError: nil can't be coerced into Fixnum
from (irb):1:in `+'
from (irb):1:in `each'
from (irb):1:in `reduce'
from (irb):1
from /Users/nick/.rvm/rubies/ruby-2.0.0-p195/bin/irb:16:in `<main>'
答案 2 :(得分:1)
尝试使用inject方法,你也可以强制转换.to_f,以便将nils清零。
@dolars =Policy.where(:type_money => 1).inject(0) { |sum, policy| sum += policy.amount_ensure.to_f }