为什么Ruby on Rails框架没有提供一种方法来理解我正在进行的操作是否会导致查询?
带一个有很多帖子的用户
在我看来我会这样做:
<% @user.posts.each do |p| %>
<%= p.title %>
<% end %>
我无法看到我的控制器中是否有
@user = User.find(params[:id]).includes(:posts)
这是一个急切的加载,导致一个查询,左连接,或者如果我做了:
@user = User.find(params[:id])
会导致n + 1次查询
如果应用程序很简单,那就不会有任何问题,但我们需要更大的应用程序。 也许查询方法不在控制器中,而是在模型中。也许它甚至不在模型中,而是在一个问题(一个外部模块,包括我的模型)。
换句话说,我的印象是失去了对框架对我的数据库做什么的控制。您是否找到了解决此问题的方法?
答案 0 :(得分:1)
您可以在应用程序中添加bullet gem,这将提示n + 1个查询
在您的应用程序中添加此gem
gem "bullet", :group => "development"
在配置文件config / environments / development.rb
中添加以下设置config.after_initialize do
Bullet.enable = true
Bullet.alert = true
Bullet.bullet_logger = true
end
之后你应该能够监控n + 1次查询
可以在下面的链接中查看更多参考资料