합계

2013-09-24 3 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' 

내가이 할 노력하고있어 :

,762,686을

내 컨트롤러의 코드가 작동해야하지만 무슨 일이 일어 났는지 모르겠다.

누군가가 나를 도와 줄 수 있습니까? 나는 정말 모든 도움을 주실 것입니다

답변

2

를 사용하여 위의 쿼리는 SQL에서 요약을 수행이

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

자체

당신이 쿼리에서 가져온 레코드를 요약 sumfind 후 전화

.

1

당신은 #amount_ensure에 대해 nil 값을 가지고 있습니다.

아마이 irb에서, 좀 더 명확하게합니다 : NILS는 비우는 있도록 분사 방법을 사용하여

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

글쎄, 내가 마지막 예제에서 이것을 사용했고 같은 증상을 가지고 일했지만 무슨 일이 일어 났는지 모르겠다. –

+0

이것은 나를 위해 일했다 @ dolars = Policy.find (: all, : conditions => "mount_type = '0 '.) .sum (& : mount). 그러나 내가 게시 한 내 조건을 작동하지 않습니다 –

+0

고마워요,하지만 그랬어요 : D –

1

봅니다, 당신은 또한 .to_f 캐스팅 할 수있다.

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

고마워요. :) –