2012-05-30 25 views
0

我有一个活动模式,它有一个datetime字段标题为scheduled_time。我需要创建一个具有特定格式('mon','tue'等)作为关键字的日期名称以及当天发生的作为值的事件计数。我怎样才能做到这一点?如何将这些对象分组为一个散列?

{ 
    'mon' => 2, 
    'tue' => 4, 
    'wed' => 3, 
    'thu' => 5, 
    'fri' => 12, 
    'sat' => 11, 
    'sun' => 7, 
} 

我用Rails 3.2.0和Ruby 1.9.2

回答

0

最简单的办法是使用count:group选项:

h = Model.count(:group => %q{to_char(scheduled_time, 'dy')}) 

的特定功能,你会像往常一样,GROUP BY将依赖于数据库;在to_char上面的方法将与PostgreSQL的工作,与MySQL你可以使用date_formatlower

h = Model.count(:group => %q{lower(date_format(scheduled_time, '%a'))}) 

SQLite的,你可能会使用strftime%w格式,然后用手将数字转换为字符串。

请注意,使用Model.count(:group => ...)会为您提供一个带有孔的散列:如果表中没有任何条目,那么哈希将不会有关键字。如果你真的想七把钥匙所有的时间,然后创建一个哈希以零:

h = { 'mon' => 0, 'tue' => 0, ... } 

然后合并count结果进去:

h.merge!(Model.count(:group => ...)) 
相关问题