2013-09-24 70 views
0

我得到當我試圖做一個條件,總結我的另一列錯誤總和控制器問題

@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" 

我的控制器中的代碼應該可以工作,但我不知道發生了什麼

有人可以幫助我嗎?我會很感激所有幫助

回答

2

使用此

@dolars = Policy.sum(:amount_ensure ,:conditions=>"type_money = '1' ") 

上面的查詢執行SQL中的總和本身

當你調用sumfind它總結從查詢中獲取的記錄。

1

您有#amount_ensure某處nil值。

也許這將使其更清晰,在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>' 
+0

那麼我在我的最後一個例子中使用了這個,並使用了相同的sintaxis,但我不知道這裏發生了什麼 –

+0

這對我有用@ dolars = Policy.find(:all,:conditions =>「mount_type ='0 「「)的.sum(:安裝)。 但不工作我的條件,我貼 –

+0

感謝的人,但我做到了:d –

1

嘗試用注射方法,你也可以施放.to_f讓尼爾斯被清零。

@dolars =Policy.where(:type_money => 1).inject(0) { |sum, policy| sum += policy.amount_ensure.to_f } 
+0

感謝它爲我工作:) –