class CommentsController < ApplicationController
def users_comments
posts = Post.all
comments = posts.map(&:comments).flatten
@user_comments = comments.select do |comment|
comment.author.username == params[:username]
end
end
end
答案 0 :(得分:1)
这将产生如此多的查询。这个问题叫做n + 1(见这里:https://www.sitepoint.com/silver-bullet-n1-problem/)。
我建议使用类似代码的内容:
@user_comments = Comment.where(author: { username: params[:username] })
我认为你不需要帖子我是对的吗?
答案 1 :(得分:0)
它只是一个普通的一般性问题,任何人都可以谷歌它,因为它需要对现有代码进行最小的更改,并且不做任何关于Comment与Post的反向关联的假设。 从此处阅读有关Ruby on Rails Development的更多有趣事实
答案 2 :(得分:-1)
这告诉ActiveRecord在初始请求所有帖子后立即从数据库中检索相应的注释和作者记录,从而将数据库请求的数量减少到只有三个。