Rails:按子对象的数量排序数组

时间:2014-04-08 20:13:43

标签: ruby-on-rails ruby arrays parent-child

我有一个posts数组。我想按照posts的数量排序comments这个数组(数组中的第一个对象是大多数注释,最后一个是最少的)。 Post有很多comments。这似乎是一个简单的问题,但我无法弄清楚如何订购它们。我试过了,我不相信可以通过order方法实现这一点。有一个我不知道的Rails方法吗?或者我必须回家滚吗?提前谢谢!

PS:我对帖子的评论关系是多态的Comment - (belongs_to :threadable

3 个答案:

答案 0 :(得分:3)

您可以使用复杂的活动记录查询执行此操作,但是,到目前为止最简单的方法是在关联上添加:counter_cache。您只需在Post模型上添加一个名为comments_count的字段,然后在评论模型中添加:

belongs_to :post, counter_cache: true

然后,因为它只是像你所有其他列一样的列,你可以通过它订购。

请参阅:http://guides.rubyonrails.org/association_basics.html

答案 1 :(得分:0)

最简单的方法可能是使用counter_cache选项

见:

-

class Comment
  belongs_to :post, counter_cache: true
end

将列comments_count添加到posts数据库表,然后按

排序

答案 2 :(得分:0)

实现它的最佳方法是使用计数器缓存功能。您需要将整数列添加到名为posts的{​​{1}}表中。然后在您的评论模型中,您需要将comments_count关联更改为:

post

Rails将处理comments_count列以显示与给定帖子关联的评论数量。然后,您可以使用此列进行排序。