group按月显示零计数请求

时间:2013-10-29 19:29:31

标签: ruby-on-rails

我坚持要获得以下内容,以便逐月显示计数,即使该月的零数也是如此。

如果我使用的话,从rails控制台:

StorageRequest.select("MONTH(created_at) as month, COUNT(id) as total").where(:created_at => 3.months.ago.to_date..Date.today).group("month")

我得到了:

|月|总计|

| 9 | 4 |

我期待得到的地方:

|月|总计|

| 8 | 0 |

| 9 | 4 |

| 10 | 0 |

我该怎么做呢。

谢谢。

1 个答案:

答案 0 :(得分:1)

这有点hacky,但这样的事情应该有效:

results = {}
StorageRequest.select("MONTH(created_at) as month, COUNT(id) as total").where(:created_at => 3.months.ago.to_date..Date.today).group("month").each { |m| results[m.month] = m.total }
(1..12).map { |m| [m, results[m] || 0] }

基本上从数据库加载结果,然后通过迭代几个月来构建自定义数据结构。对于自定义结构,将count设置为数据库中的值(如果可用),否则为0。