我有一个事件模式,其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 :(得分:0)
最简单的方法是将count
与:group
选项一起使用:
h = Model.count(:group => %q{to_char(scheduled_time, 'dy')})
像往常一样,GROUP BY的特定功能取决于数据库;上面的to_char
方法适用于PostgreSQL,使用MySQL可以使用date_format
和lower
:
h = Model.count(:group => %q{lower(date_format(scheduled_time, '%a'))})
对于SQLite,您可能会使用strftime
格式{{3}},然后手动将数字转换为字符串。
请注意,使用%w
将为您提供一个带有漏洞的哈希:如果当天表中没有任何条目,那么哈希将没有密钥。如果你真的想要七个键,那么用零创建一个Hash:
Model.count(:group => ...)
然后将h = { 'mon' => 0, 'tue' => 0, ... }
结果合并到其中:
count