1

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

以上有效,以下无效。

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

据我了解,连接和包含都应该带来相同的结果和不同的性能。据此您使用includes加载Model调用的对象的关联记录,其中joins只需将两个表添加在一起。使用includes还可以防止N+1 queries.

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

第二个问题:任何人都应该includes在与上述类似的情况下使用吗?

4

1 回答 1

1

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

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

于 2013-01-20T16:04:28.170 回答