我刚开始使用rails。到目前为止爱它,但还有一些我还没有掌握的东西。
其中之一是joins/includes
与关联之间的互动。对于每个模型,您可以将其关系(has_many
,belongs_to
等)定义为其他模型。这足以让他们通过主键连接并找到对方,对吗?
那么使用joins/includes
又有什么意义呢?我自己的猜测是减少sql查询并只获取必要的对象,但我想清楚这一点。
对范围之类的连接的关联是order/where
等等。可以修改的默认行为类型是什么?
真的想要理顺这一点。
答案 0 :(得分:0)
Railscast #181 By Ryan Bates非常清楚。
有效地,join
用于在数据库服务器上有效地连接两个表。但是,默认情况下,只有第一个表中的列包含在数据集中。您将使用join
来测试第一个表中的记录与第二个表中的条件。
include
类似于连接,但是对于任何相关记录,在第二个表的行上进行有效的数据检索,并使用这些记录填充Rails ActiveRecord
缓存。
因此,如果您有一个User
类和一个Role
类,User
可以附加一个Role
,那么用户和角色将同时从数据库中检索实例。
用户#5 =>指向=>角色#7
用户#10 =>指向=>角色#12
使用includes()
从User表中检索用户#5和#10也将使用SQL查询实例化#7和#12角色,例如:
SELECT roles.* FROM roles WHERE id IN (7,12)