Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 联接、包含和关联之间的差异_Ruby On Rails 3_Activerecord - Fatal编程技术网

Ruby on rails 3 联接、包含和关联之间的差异

Ruby on rails 3 联接、包含和关联之间的差异,ruby-on-rails-3,activerecord,Ruby On Rails 3,Activerecord,我刚开始使用rails。到目前为止我很喜欢,但有一些事情我还没有掌握 其中之一是连接/包含和关联之间的交互。对于您定义的每个模型(有许多,属于,等等)与其他模型的关系。这足以让他们通过主键连接并找到对方,对吗 那么,使用连接/包含有什么意义呢?我自己的猜测是减少sql查询,只获取必要的对象,但我想澄清一下这一点。 连接的关联是否像作用域是到顺序/where等一样是一种可修改的默认行为 我真的很想把这件事弄清楚。很好地涵盖了这一点 有效地,join用于高效地连接数据库服务器上的两个表。但是,默认情

我刚开始使用rails。到目前为止我很喜欢,但有一些事情我还没有掌握

其中之一是
连接/包含
和关联之间的交互。对于您定义的每个模型(
有许多
属于
,等等)与其他模型的关系。这足以让他们通过主键连接并找到对方,对吗

那么,使用
连接/包含
有什么意义呢?我自己的猜测是减少sql查询,只获取必要的对象,但我想澄清一下这一点。
连接的关联是否像作用域是到
顺序/where
等一样是一种可修改的默认行为

我真的很想把这件事弄清楚。

很好地涵盖了这一点

有效地,
join
用于高效地连接数据库服务器上的两个表。但是,默认情况下,数据集中只包括第一个表中的列。您可以使用
join
根据第二个表中的条件测试第一个表中的记录

include
类似于join,但对第二个表的行中的任何相关记录执行有效的数据检索,并用这些记录填充Rails
ActiveRecord
缓存

因此,如果您有一个
用户
类和一个
角色
类,其中
用户
可以附加一个
角色
,那么用户和角色实例将同时从数据库中检索

User#5=>指向=>Role#7

用户10=>指向=>角色12

使用
includes()
从用户表检索用户5和10还将使用SQL查询实例化角色7和12,例如:

选择角色。*从(7,12)中id所在的角色中选择