Rails ORM查询结果

时间:2014-06-27 13:44:21

标签: ruby-on-rails database ruby-on-rails-4

为什么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次查询

如果应用程序很简单,那就不会有任何问题,但我们需要更大的应用程序。 也许查询方法不在控制器中,而是在模型中。也许它甚至不在模型中,而是在一个问题(一个外部模块,包括我的模型)。

换句话说,我的印象是失去了对框架对我的数据库做什么的控制。

您是否找到了解决此问题的方法?

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次查询

可以在下面的链接中查看更多参考资料

https://github.com/flyerhzm/bullet