2

从过去两年中提取捐款后,我试图得出每月捐款的总和(总共 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 中做到这一点?

4

2 回答 2

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]
于 2013-08-29T21:22:52.810 回答
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]该月/年捐赠的总金额的键和值。可能还有其他一些合适的方法来创建满足您的应用程序需要的密钥。

于 2013-08-29T21:19:39.887 回答