2013-02-01 64 views
2

我有一個帶有布爾值的列,並且希望使用'sum'函數來計算總數。此列用於獲取類似於Stack Overflow或reddit的投票計數。我該如何計算Ruby on Rails中布爾列的總和

這裏是我的代碼

votes = Vote.all 
total = votes.sum(:direction) 
puts' ....................' + total.to_s 

這是我的錯誤...

undefined method `+' for #<Vote:0x000000047c9170> 

任何幫助表示讚賞

+0

'Vote.sum算值它執行一個db查詢,你不能這樣做,因爲你已經在你的關係上調用了'.all'。否則,您可以這樣做:'votes.map(&:direction).reduce(:+)'或者'votes.sum(&:direction)' –

+0

這是最佳實踐,還是應該使用範圍? – Jakcst

回答

8

一個布爾值的總和? (:方向)`http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-sum我只是要麼direction=falsedirection=true

total_down = Vote.where(direction: false).count #down vote 
total_up = Vote.where(direction: true).count #up vote 
puts "....... #{total_up} .... #{total_down}"