通过计数has_many关系来进行Rails查询

时间:2019-04-29 16:37:44

标签: ruby-on-rails

我有一个模型,例如Post和一个Post has_many注释。我想按评论最多的帖子的顺序查询帖子。如何通过活动记录查询来做到这一点?

现在我正在尝试:

Post.includes(:comments).order('COUNT(comments.post_id) DESC')

但是我得到了错误:

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "comments")

1 个答案:

答案 0 :(得分:2)

Post.left_outer_joins(:comments)
    .group(:id) # required by Postgres
    .order(Arel.sql('COUNT(comments.*) DESC')) # https://github.com/rails/rails/issues/32995

如果要在结果中使用计数,也可以选择它:

Post.left_outer_joins(:comments)
    .select('posts.*, COUNT(comments.*) AS comment_count')
    .group(:id) # required by Postgres
    .order('comment_count DESC') # Use COUNT(comments.*) in Oracle

解决此问题的另一种方法是使用counter_cache