@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
?
答案 0 :(得分:1)
当您要查询已连接的模型时,可以使用连接。这是在表之间进行内部联接。
包含在您希望将关联模型加载到最终结果时。
这允许您在任何结果上调用关联,而无需再次执行数据库查找。
您无法查询通过包加载的模型。如果你想查询它,你必须使用连接(你可以做两个!)