我正在使用带有Ruby on Rails的Postgres,并希望在我的posts
表中查询返回按created_at
日分组的所有帖子,每个组按时间顺序排列。< / p>
我的目标的一个完美示例是任何博客的索引按日期列出所有帖子。
我希望得到的伪代码对象结构与此类似:
posts_grouped_by_date = {
"1/2/2014" => [post1, post2, post3],
"1/15/2014" => [post5, post6,post7],
etc..
}
我的表名为posts
,看起来像这样:
id | title | created_at
----+-------------------------------------------------------------------+----------------------------
13 | Eaque hic tenetur at quam quibusdam eveniet veritatis. | 2014-08-18 02:40:31.329665
9 | The only thing i want to say. | 2014-08-18 02:40:31.329665
16 | Est sunt cumque rerum nam nobis consequuntur aut. | 2014-08-19 02:58:26.817936
18 | Fuga assumenda facilis aut mollitia eum soluta. | 2014-08-19 02:58:26.837839
8 | The only thing i want to say. | 2014-08-18 02:40:31.329665
12 | Laudantium dolores odit sed veritatis in et vel deserunt. | 2014-08-18 02:40:31.329665
10 | The only thing i want to say. | 2014-08-18 02:40:31.329665
20 | Rem laboriosam ipsam sunt maxime quia adipisci et voluptatem. | 2014-08-19 02:58:26.837839
19 | Laudantium sit explicabo et quia eligendi ipsam. | 2014-08-19 02:58:26.837839
21 | Repellat qui eos dolorem. | 2014-08-19 02:58:26.837839
6 | The only thing i want to say. | 2014-08-18 02:40:31.329665
17 | Error voluptatem architecto distinctio impedit iste dolores enim. | 2014-08-19 02:58:26.829968
15 | Vero modi voluptate deleniti labore quis est. | 2014-08-19 02:58:26.808126
14 | Et neque porro qui animi facilis numquam. | 2014-08-19 02:58:26.800474
我如何使用ActiveRecord或Arel语法执行此操作?代码背后的解释也非常有用。我正在使用它进行学习/练习,而不仅仅是寻找复制/粘贴。
答案 0 :(得分:0)
我想你想要这样的东西:
Post.order(:created_at).group_by {|p| p.created_at.to_date}
1 - Post.order(:created_at)按增量顺序按created_at属性对帖子进行排序。
2 - 然后,一旦您订购了所有帖子,您就可以使用块中的代码对它们进行分组。由于您不希望分组中包含时间戳(每秒都会有不同的记录,那么重点是什么?),您将时间戳转换为日期。