2013-08-29 48 views
2

從過去兩年的捐款中,我試圖得出每月捐款總額(總計24筆),存儲密鑰(每月)和價值(每月的捐款總和)在一個哈希數組中。我如何在24個月內找到每月捐款總額?

這裏是我到目前爲止有:

@donations = Gift.between(Date.today - 2.years, Date.today, :field => gift_date) 

@donations.each do |donation| 
    #logic here that puts gift_amount into the right month (of the 24 months) 
    # and adds it to the previous balance for that month, ending up with 24 keys 
    # and sum values. 
end 

怎麼能在我的Ruby/Rails這樣做呢?

+1

我認爲你可以做'@donations = Gift.where(gift_date:(Date.today - 2.years).. Date.today)'這將生成一個SQL「BETWEEN」。 – lurker

回答

2

繼續在那裏@mbratch不放過:

donations = Gift.where(:date => (Date.today - 2.years)..Date.today) 
Hash[donations.group_by { |d| [d.date.year, d.date.month] } 
.map do |year_month, donations| 
    [year_month, donations.map(&:amount).reduce(:+)] 
end] 
+0

一個很好的開始,謝謝。這是按月份總結的,與去年相比,今年8月與今年8月總結。我需要去年的八月份是今年八月份的一筆單獨款項。更多的想法? –

+0

糟糕,請編輯:)。 – nicooga

0
donation_hash = Hash.new(0) 

Gift.where(:gift_date => (Date.today - 2.years)..Date.today).each do |donation| 
    donation_hash[[donation.gift_date.month, donation.gift_date.year]] += donation.amount 
end 

這將創建的[month, year]鍵和捐贈爲月/年總量值的哈希值。可能還有其他一些合適的方法來創建滿足您應用程序需求的密鑰。