Ruby / Rails:如何显示每年和每月的总和值?

时间:2013-08-05 05:43:45

标签: ruby ruby-on-rails-3

我有一个名为Receipt的模型,它有以下内容:

  • date_of_purchase - datetime
  • total_value - float

我有一个包含许多收据的数据库,例如:

收据1

  • date_of_purchase = 2012-01-23
  • total_value = 6

收据2

  • date_of_purchase = 2012-01-04
  • total_value = 70

收据3

  • date_of_purchase = 2013-02-14
  • total_value = 1.23

收据4

  • date_of_purchase = 2013-02-06
  • total_value = 90.34

...

收据123

  • date_of_purchase = 2013-08-05
  • total_value = 43.69

如何显示以下内容:

{2012 => {1 => 76},2013 => {2 => 92.23,3 => 34.43,...}}

1 个答案:

答案 0 :(得分:1)

以下应该工作

receipts = Receipt.find_by_sql("SELECT MONTH(date_of_purchase) AS month, 
                       YEAR(date_of_purchase) AS year, SUM(total_value) as sum
                       FROM receipts GROUP BY year, month")

receipts_hash = {}
receipts.each do |receipt|
  receipts_hash[receipt.year] = {} unless receipts_hash[receipt.year]
  receipts_hash[receipt.year][receipt.month] = receipt.sum
end