Sql Rails 5,@child.parent,N+;1颗子弹

Sql Rails 5,@child.parent,N+;1颗子弹,sql,ruby-on-rails,ruby,ruby-on-rails-4,rails-activerecord,Sql,Ruby On Rails,Ruby,Ruby On Rails 4,Rails Activerecord,轨道5 新应用程序,全部默认 告诉我: user: root /children/2 N+1 Query detected Child => [:parent] Add to your finder: :includes => [:parent] N+1 Query method call stack app/controllers/children_controller.rb:14:in `show' app/controllers/children_controlle

轨道5

新应用程序,全部默认

告诉我:

user: root
/children/2
N+1 Query detected
  Child => [:parent]
  Add to your finder: :includes => [:parent]
N+1 Query method call stack
  app/controllers/children_controller.rb:14:in `show'
app/controllers/children_controller.rb:14:in `show'
我有这些型号

class Parent < ApplicationRecord

    has_many :children

end

class Child < ApplicationRecord

    belongs_to :parent

end
在我的视图中,我有以下内容:

...
<%= @parent.name %>
...
我在Bullet中也有同样的错误,但是在html中

如何修复此问题?是真的N+1问题还是子弹错了?


这个项目真的很新。第一种模式。

我不认为这是一个N+1问题,因为孩子只有一个父母。但是,如果有区别,可以使用include:

@child = Child.includes(:parent).find(1)

但是,如果您在终端上同时尝试这两种方法,您将看到ActiveRecord生成了两条SQL语句,其中包含和不包含includes。

Hi:请检查show action(在控制器中)中@child的值是否为零。你必须以某种方式获取该记录:例如,'@child=child.first看看它是否工作?你可能会从中得到乐趣and@BKSpurgeon,它不是零。现在有两个查询。我想这是宝石子弹里的一只虫子。我不敢相信我不得不这样称呼它。在github上创建一个问题来讨论您的体验。
<%= @child.parent.name %>
...

def show
    #nothing more
end
...
@child = Child.includes(:parent).find(1)