Ruby on rails rails按计数的查询有很多关系

Ruby on rails rails按计数的查询有很多关系,ruby-on-rails,Ruby On Rails,我有一个模型,比如Post,一个Post有很多评论。我想以评论最多、评论最少的帖子顺序查询帖子。如何使用活动记录查询执行此操作 现在我正在尝试: Post.includes(:comments).order('COUNT(comments.post_id) DESC') 但我得到了一个错误: ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: missing FROM-clause entry for table "comme

我有一个模型,比如Post,一个Post
有很多评论。我想以评论最多、评论最少的帖子顺序查询帖子。如何使用活动记录查询执行此操作

现在我正在尝试:

Post.includes(:comments).order('COUNT(comments.post_id) DESC')
但我得到了一个错误:

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  missing FROM-clause entry for table "comments")
如果要在结果中使用计数,也可以选择它:

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
另一种解决方法是使用

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

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

另一种解决方法是使用。

您使用的是什么数据库?在这种情况下,这一点对于分组推理集很重要。我刚刚用一些示例代码更新了我的问题。
Post.includes(:comments)。references(:comments)。group(:id)。order('COUNT(comments.Post_id)DESC')
应该可以
includes
在您的情况下不会自动加入表,但
references
会告诉它您在使用哪个数据库?在这种情况下,这一点对于分组推理集很重要。我刚刚用一些示例代码更新了我的问题。
Post.includes(:comments)。references(:comments)。group(:id)。order('COUNT(comments.Post_id)DESC')
应该可以
includes
在您的情况下不会自动加入表,但是
references
会告诉它要加入Rails 5中引入的
left\u outer\u joins
。如果您需要向后兼容,请使用
。包括
。^我们需要的英雄,但不是我们应得的英雄如果我们要
arel
,那么让我们一路来吧
Comment.arel_table[:id].count.desc
=
count(comments.id)desc
我当然知道它是什么,但我的建议使您不必在输出中使用
字符串,这就是我提到它的原因。如果
Comment
类发生更改,那么它也有助于重构可维护性,因为我们引用的是该类,而不是以字符串形式显式引用表名。实际上,它的
Comment.arel\u table[arel.star].count.desc
left\u outer\u joins
是在Rails 5中引入的。如果您需要向后兼容,请使用
。包括
。^我们需要的英雄,但不是我们应得的英雄如果我们要
arel
,那么让我们一路来吧
Comment.arel_table[:id].count.desc
=
count(comments.id)desc
我当然知道它是什么,但我的建议使您不必在输出中使用
字符串,这就是我提到它的原因。如果
Comment
类发生更改,它也有助于重构可维护性,因为我们引用的是类而不是字符串形式的表名。实际上,它的
Comment.arel\u表[arel.star].count.desc