按创建日期的日期跟踪组记录

And*_*ndy 4 ruby-on-rails

所以我有一个模型,我想要检索记录,并按created_at字段的日期对它们进行分组.但created_at是一个日期时间字段,我只对日期部分感兴趣.所以我正在寻找类似2D数组的东西,第一层是以日期字符串为键的哈希,第二层是带记录的数组.我该怎么办?

{
"9/28/2012" => [record, record, record],
"9/29/2012" => [record, record, record],
"9/30/2012" => [record, record, record]
}

除此之外,如果我希望将上述排列应用于从该模型中检索到的所有记录,我该怎么办呢?

Pin*_*nyM 7

ActiveRecord group方法将满足您的需求.在您的情况下,问题将created_at在于使用哪个是日期时间,而您的约束是按日期分组.由于将日期时间转换为日期是特定于数据库的,因此代码也需要是特定于数据库的.

对于MySql,您可以:

Model.group("date(table_name.created_at)")
Run Code Online (Sandbox Code Playgroud)

对于SQLite,您可以:

Model.group("strftime('%Y-%m-%d', table_name.created_at)")
Run Code Online (Sandbox Code Playgroud)

而对于PostgreSQL:

Model.group("table_name.created_at::date")
Run Code Online (Sandbox Code Playgroud)

遗憾的是,此代码不可移植,但这对您来说无关紧要.如果是这样,您始终可以构建一个包装器方法,根据您的DBMS选择正确的转换语法.