好的,我有
>> list = Request.find_all_by_artist("someBand")
=> [#<Request id: 1, artist: "someBand", song: "someSong", venue: "Knebworth - Stevenage, United Kingdom", showdate: "2011-07-01", amount: nil, user_id: 2, created_at: "2011-01-01 18:14:08", updated_at: "2011-01-01 18:14:09".............
然后
list.group_by(&:created_at).map {|k,v| [k, v.length]}.sort
=> [[Sat, 01 Jan 2011 18:14:08 UTC +00:00, 10], [Sun, 09 Jan 2011 18:34:19 UTC +00:00, 1], [Sun, 09 Jan 2011 18:38:48 UTC +00:00, 1], [Sun, 09 Jan 2011 18:51:10 UTC +00:00, 1], [Sun, 09 Jan 2011 18:52:30 UTC +00:00, 1], [Thu, 10 Feb 2011 02:22:08 UTC +00:00, 1], [Thu, 10 Feb 2011 20:02:20 UTC +00:00, 1]]
问题是我有几个星期天,1月9日和10日的一对夫妇,而不是像这样的一个
这就是我需要的
=> [[Sat, 01 Jan 2011 18:14:08 UTC +00:00, 10], [Sun, 09 Jan 2011 18:34:19 UTC +00:00, 4], [Thu, 10 Feb 2011 20:02:20 UTC +00:00, 2]]
7条答案
按热度按时间4nkexdtk1#
我认为这是一个更加优雅和简单的解决方案
eqqqjvef2#
Time
是一个非常复杂的分组对象。假设你想按创建日期分组,而不是完整的Time
,开始在你的模型中创建一个自定义方法来返回分组条件。该方法应该返回创建日期,可能是字符串形式。
然后按该方法分组。
mw3dktmi3#
这里有一个gem:groupdate .
用法(来自文档):
8iwquhpp4#
Ipsum的回答其实很好,而且可能是最好的:
在Arel:
t3irkdon5#
可以在MySQL中使用
GROUP BY DATE(created_at)
在ruby代码中,你可以这样使用
ergxz8rk6#
没有额外宝石的组:
x6h2sr287#
我最近发现了groupdate gem,它似乎很适合处理这个任务。
此代码示例演示了如何在实践中使用它来解决问题:
这里最重要的部分是它在后台生成SQL,这比计划Ruby代码的性能要高得多。