Rails查询]连接和包含之间的区别

时间:2013-01-20 10:07:39

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

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

以上作品,下面没有。

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

据我所知,连接和包含都应该带来不同性能的相同结果。根据{{​​3}},您使用includes加载由Model调用的对象的关联记录,其中joins只是将两个表一起添加。使用includes也可以阻止N+1 queries

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

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

1 个答案:

答案 0 :(得分:1)

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

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