我刚开始使用rails。到目前为止,我很喜欢它,但有些东西我还没有掌握。
其中一个是joins/includes
与关联的交互作用。对于每个模型,您定义其与其他模型的关系(has_many
, belongs_to
等)。这足以让它们通过主键连接并找到彼此,对吧?
那么使用joins/includes
有什么意义呢?我自己的猜测是减少sql查询,只获取必要的对象,但我想明确这一点。它的关联是连接,就像范围是order/where
等。是一种可以修改的默认行为吗?
我真想把这件事弄清楚
Railscast #181 By Ryan Bates讲得很好。
有效地使用join
来连接数据库服务器上的两个表。但是,默认情况下,数据集中只包含第一个表中的列。您将使用join
根据第二个表中的标准测试第一个表中的记录。
include
类似于join,但是在第二个表的行上进行有效的数据检索,查找相关的记录,并用这些记录填充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)