我有一个模型,例如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")
答案 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。