Rails 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
我在 children_controller.rb 中有这个控制器:
...
def show
@parent = @child.parent
end
...
在我的观点中 views / children / show.html.erb 我有这个:
...
<%= @parent.name %>
...
如果我将其反转并在视图中我放了:
<%= @child.parent.name %>
并在控制器中:
...
def show
#nothing more
end
...
我在Bullet中遇到了同样的错误,但在html中。
如何解决这个问题?真的是N + 1问题还是子弹错了?
这个项目真的很新。第一个模型。
答案 0 :(得分:2)
我不认为它是一个N + 1问题,因为一个孩子只有一个父母。但是,您可以使用包含,如果这有所不同:
@child = Child.includes(:parent).find(1)
但是如果你在终端上尝试两种方法,你会看到ActiveRecord生成了2个包含和不包含的SQL语句。