【问题标题】:Rails query] difference between joins and includesRails查询]连接和包含之间的区别
【发布时间】:2013-01-20 10:07:38
【问题描述】:

@teachers = User.joins(:students).where("student_id IS NOT NULL")

上面的有效,下面的无效。

@teachers = User.includes(:students).where("student_id IS NOT NULL")

据我了解,连接和包含都应该带来相同的结果和不同的性能。根据this,你使用includes来加载Model调用的对象的关联记录,其中joins只是简单地将两个表相加。使用includes也可以防止N+1 queries

第一个问题:为什么我的第二行代码不起作用?

第二个问题:在与上述类似的情况下,是否有人总是使用includes

【问题讨论】:

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


【解决方案1】:

当您想要查询连接模型时,您可以使用连接。这是在您的表之间进行内部连接。

包含是当您希望将关联模型加载到最终结果时。
这允许您在任何结果上调用关联,而无需再次进行数据库查找。 您不能查询通过包含加载的模型。如果你想查询它,你必须使用连接(你可以同时做!)

【讨论】:

  • 感谢您指出无法查询仅包含的项目。
  • 现在还不完全正确,您现在可以在连接查询中运行条件:guides.rubyonrails.org/…
  • 这是不正确的,您当然可以对使用“引用”加载的模型进行查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-15
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
相关资源
最近更新 更多