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

4

1 回答 1

0

最简单的方法是使用count一个:group选项:

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

像往常一样,您要 GROUP BY 的特定功能取决于数据库;上面的to_char方法适用于 PostgreSQL,你可以使用 MySQLdate_formatlower

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

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

请注意, usingModel.count(:group => ...)会给你一个带有漏洞的哈希:如果那天表中没有任何条目,那么哈希将没有它的密钥。如果您真的一直想要七个键,那么创建一个带有零的哈希:

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

然后将count结果合并到其中:

h.merge!(Model.count(:group => ...))
于 2012-05-30T03:47:45.147 回答