将对象查询为数组

时间:2014-11-20 16:49:15

标签: ruby-on-rails ruby database postgresql

我有一个主题有很多来源(来源属于主题)。每个来源都有一个published_date字段。我想要的是查询topic.sources并将它们分组为基于published_date的对象数组。

执行此操作的一种方法是调用topic.sources,然后按published_date对其进行排序。最后为每个日期创建新数组并相应地将其推送到数组中。

topic.sources对象(数组):

[#<Source id: 12, topic_id: 2, published_date: "2014-11-13">,
 #<Source id: 9, topic_id: 2, published_date: "2014-10-21">
 #<Source id: 8, topic_id: 2, published_date: "2014-10-21">]

这应该看起来像这个数组数组:

[[#<Source id: 9, topic_id: 2, published_date: "2014-10-21">
 #<Source id: 8, topic_id: 2, published_date: "2014-10-21">],
[#<Source id: 12, topic_id: 2, published_date: "2014-11-13">]]

1 个答案:

答案 0 :(得分:2)

尝试使用group_by

topic.sources.group_by(&:published_date)

你应该得到Hash,看起来像这样:

{"2014-10-24" => [#<Source id: 9, topic_id: 2, published_date: "2014-10-21">
                  #<Source id: 8, topic_id: 2, published_date: "2014-10-21">],
 "2014-11-13" => [#<Source id: 12, topic_id: 2, published_date: "2014-11-13">]}