如何解决2个关联的N + 1查询

时间:2015-10-29 17:38:48

标签: ruby-on-rails

我正在使用comment.user,我正在使用以下代码填充评论:

@comments = Post.find(params[:post_id]).comments.hash_tree(limit_depth: 3)

现在,Bullet显示:

  

N + 1检测到查询

     

Comment => [:user]

     

添加到查找程序::includes => [:user]

现在,我尝试了Post.includes(:comments, :user)Post.includes(comments: :user)和其他此类变体,但是Bullet会告诉我N + 1查询仍然存在。

模特和协会:

class User < ActiveRecord::Base
  has_many :posts
  has_many :comments
end
class Post < ActiveRecord::Base
  belongs_to :user
  has_many :comments, dependent: :destroy
end
class Comment < ActiveRecord::Base
  belongs_to :user
  belongs_to :post
end

解决方案是什么?

2 个答案:

答案 0 :(得分:0)

我认为您希望将user包含在错误的位置。子弹说的是关系comments - &gt; user导致问题。

你试过了吗?

@comments = Post.find(params[:post_id]).
  comments.includes(:user).hash_tree(limit_depth: 3)

答案 1 :(得分:0)

@comments = Comment.where(post_id: params[:post_id]).hash_tree(limit_depth: 3)

如果需要用户信息

@comments = Comment.where(post_id: params[:post_id]).joins(:user).select("*, users.nickname as user_nickname").hash_tree(limit_depth: 3)