1

過去 2 年間の寄付を集めたので、キー (毎月) と値 (毎月の寄付の合計) をハッシュの配列に格納して、1 か月あたりの寄付の合計を取得しようとしています。キーを 1 ~ 24 の数字 (1 は 2 年前、24 は今月) にしたいと思います。特定の月に寄付がなければ、その月の値はゼロになります。Ruby/Rails でハッシュの配列としてこれを行うにはどうすればよいですか?

これは、すでに寄付が入っている私の変数です。

donations = Gift.where(:date => (Date.today - 2.years)..Date.today)
4

3 に答える 3

1

以下は、キー '2013/09" などのハッシュを提供します...

 monthly_donations = {}
 date = Time.now
 while date > 2.years.ago do 

   range = date.beginning_of_month..date.end_of_month
   monthly_donations[ "{#date.year}/#{date.month}" ] = Giftl.sum(:column, :conditions => {created_at >= range})

   date -= 30.days
 end

その期間のレコードを選択するには、これで十分です。

 donations = Gift.where("date >= #{2.years.ago}") 

これを行うこともできます:

 donations = Gift.where("date >= :start_date AND date <= :end_date",
                         {start_date: 2.years.ago, end_date: Time.now} )

参照: 2.2.1 「プレースホルダー条件」 http://guides.rubyonrails.org/active_record_querying.html

データベース レコードの列を合計するには、次のようにします。

 sum = Gift.sum(:column , :conditions => {created_at >= 2.years.ago})
于 2013-09-03T21:45:39.203 に答える
0

すべてのベースをカバーする優れたソリューションを見つけました.@ user1185563のソリューションは、寄付なしでは何ヶ月も持ちませんでした.@ Tiloはデータベースを24回呼び出しましたが、私はそのアイデアにとても感謝しています! これはもっと効率的にできると確信していますが、24 個の要素 (キー: 毎月の初め、値: 0) でハッシュを作成し、寄付を繰り返し処理して、その金額をハッシュの適切な位置に追加しました。

def monthly_hash
  monthly_hash = {}
  date = 2.years.ago
  i = 0
  while date < Time.now do
    monthly_hash["#{date.beginning_of_month}"] = 0
    date += 1.month
    i += 1
  end
  return monthly_hash
end

@monthly_hash = monthly_hash
@donations.each do |donation|
  @monthly_hash["#{donation.date.beginning_of_month}"] += donation.amount
end
于 2013-09-04T19:32:40.760 に答える