Ruby on rails Rails将嵌套表与条件连接起来,并防止N+;1查询
这些模型只是Ruby on rails Rails将嵌套表与条件连接起来,并防止N+;1查询,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,这些模型只是User和Review。关系:用户有许多评论。我想查询出哪个用户有超过2条评论 这是我写的,而且很有效 User.joins(:reviews).group(:id).having("COUNT('reviews.id') > 2") 然后我想包装它们,并返回用户的id,名字和评论的标题。因此,我尝试了以下方法,但抛出了一个N+1查询问题 User.select(:id,:first_name) .joins(:reviews).group(:id) .hav
User
和Review
。关系:用户
有许多评论
。我想查询出哪个用户有超过2条评论
这是我写的,而且很有效
User.joins(:reviews).group(:id).having("COUNT('reviews.id') > 2")
然后我想包装它们,并返回用户的id
,名字
和评论的标题
。因此,我尝试了以下方法,但抛出了一个N+1查询问题
User.select(:id,:first_name)
.joins(:reviews).group(:id)
.having("COUNT('reviews.id') > 2")
.as_json(include: {reviews: {only: :title}})
只需将连接
到包含
似乎不起作用,有没有办法解决组
,具有
条件的急切加载问题?尝试以下方法:
User.select(:id, :first_name).left_joins(: reviews).includes(: reviews).group(:id).having("COUNT('reviews.id') > 2")
它适用于我,但是,我不知道什么是
。作为{u json(包括:{items:{only::title}}})
,如果它适用于。作为{u json(包括:{items:{only::title}})
,很抱歉,这是错误的模型名称。它是json(包括:{reviews
。},而不是项
,因此基本上,如果我想使用带联接的渴望加载
,我需要添加左联接
?你能解释一下为什么只有包含
不起作用吗?嗨@CodaChang我对SQL不是很熟悉,在我的理解中,联接使用内部联接,在你的情况下,左外部联接会更好。你可以使用joins,但查询将是User.select(:id,:first\u name)。join(:reviews)。includes(:reviews)。group(:id)。having(“COUNT(*)>2”)
。仅包括不起作用,我的理解是,在使用having.ref时应该使用join