下面的控制器代码有什么问题?你会怎么解决它?

时间:2016-07-26 06:42:51

标签: ruby-on-rails

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

3 个答案:

答案 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在初始请求所有帖子后立即从数据库中检索相应的注释和作者记录,从而将数据库请求的数量减少到只有三个。