从ActiveRecord Association CollectionProxy创建数组

时间:2014-06-26 09:51:24

标签: ruby-on-rails ruby arrays activerecord ruby-on-rails-4

我有一个has_many个主题的群组模型。主题模型has_many帖子。 我想为按Post属性:published_on排序的组创建所有主题的数组。

在我的群组展示页面上,我有@group.topics.collect {|x| x.posts },它返回一个ActiveRecord::Associations::CollectionProxy数组,每个元素都包含一个帖子对象数组。

[
[[topic1 post],[topic1 post],[topic1 post]],
[[topic2 post],[topic2 post],[topic2 post]],
[[topic3 post],[topic3 post],[topic3 post]],
]

如何创建按照:published_on?

排序的单个帖子数组

2 个答案:

答案 0 :(得分:5)

我认为

group.topics.includes(:posts).order("posts.published_on").map(&:posts).flatten

就够了。

答案 1 :(得分:1)

您还可以通过正确的关系解决此问题。

在您的Group模型上,您可以执行以下操作:

# you already have this relation
has_many :topics
# you add this
has_many :posts, through: :topics

through使用topics就像posts的桥梁一样,并返回posts拥有的所有group

然后,您的查询将类似于 group.posts.order(:published_on)