8

したがって、レコードを取得し、created_at フィールドの日付でグループ化するモデルがあります。しかし、created_at は日時フィールドであり、日付の部分だけに関心があります。だから私は2D配列のようなものを探しています。最初のレイヤーはキーとして日付文字列を持つハッシュになり、2番目のレイヤーはレコードを持つ配列になります。どうすればいいですか?

{
"9/28/2012" => [記録、記録、記録]、
"9/29/2012" => [記録、記録、記録]、
"2012/9/30" => [記録、記録、記録]
}

上記に加えて、このモデルから取得したすべてのレコードに上記の配置を適用するにはどうすればよいですか?

4

2 に答える 2

13

ActiveRecordgroupメソッドはあなたが必要とすることをします。あなたの場合、問題created_atは、日時であるを使用することと、日付でグループ化するための制約にあります。日時の日付へのキャストはデータベース固有であるため、コードもデータベース固有である必要があります。

MySqlの場合、次のことができます。

Model.group("date(table_name.created_at)")

SQLiteの場合、次のことができます。

Model.group("strftime('%Y-%m-%d', table_name.created_at)")

そしてPostgreSQLの場合:

Model.group("table_name.created_at::date")

このコードは残念ながら移植性がありませんが、それはあなたにとって重要ではないかもしれません。その場合、DBMSに基づいて正しい変換構文を選択するラッパーメソッドをいつでも構築できます。

于 2012-09-30T01:51:28.380 に答える
0

ActiveRecord では、次のことができます。

2.6.4 :036 > User.group('created_at::date').count

   (5.3ms)  SELECT COUNT(*) AS count_all, created_at::date AS created_at_date FROM "users" GROUP BY created_at::date
 => {Sat, 27 Feb 2021=>5865

于 2021-05-21T12:53:25.500 に答える