Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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 Rails 5-Way中的这两个语句是否相互矛盾?_Ruby On Rails_Join_Rails Activerecord - Fatal编程技术网

Ruby on rails Rails 5-Way中的这两个语句是否相互矛盾?

Ruby on rails Rails 5-Way中的这两个语句是否相互矛盾?,ruby-on-rails,join,rails-activerecord,Ruby On Rails,Join,Rails Activerecord,我现在正在阅读Rails 5路,我已经到达了包含和连接的部分。到目前为止,我的理解是,Include最适合于将DB数据加载到内存中,以避免N+1查询,而Join更适合于基于关联表对查询结果集进行简单筛选,而不实际访问这些关联表行上的属性: 一, 包括*协会 活动记录具有消除 “N+1”查询,允许您指定要加载的关联 在查找程序中使用includes方法或选项。活动记录 将以最少的查询数加载这些关系 可能 二, JoinExpression连接的工作原理与使用内部连接的Include类似 加入结果S

我现在正在阅读Rails 5路,我已经到达了包含和连接的部分。到目前为止,我的理解是,Include最适合于将DB数据加载到内存中,以避免N+1查询,而Join更适合于基于关联表对查询结果集进行简单筛选,而不实际访问这些关联表行上的属性:

一,

包括*协会 活动记录具有消除 “N+1”查询,允许您指定要加载的关联 在查找程序中使用includes方法或选项。活动记录 将以最少的查询数加载这些关系 可能

二,

JoinExpression连接的工作原理与使用内部连接的Include类似 加入结果SQL查询。学习的关键知识之一 关于内部联接的理解是,它们只返回记录集 匹配要联接的表的。如果在 join在另一侧缺少其对应的行,也不会 将在结果集中返回

然而,在第202页,我看到了以下内容:

三,

到目前为止,joins方法最常用的用法是立即获取 在单个SELECT语句中关联对象的数据,以便 防止所谓的N+1查询

引号3中描述的用法似乎更适合引号1,而不是引号2,也就是说,它讨论了通过急切加载数据来减少N+1查询的目标,我知道其中包括通过调用“急切加载”或“引擎盖下的预加载”来实现的。老实说,引号3和1根本不匹配


我的问题是——我们如何协调这三个引语?或者它们已经同步了,而我只是缺少了一些东西?

第三句话完全不正确。联接不加载关联的记录。渴望与懒惰与包含与联接正交。包含隐式联接。如果您不使用N+1而使用N+1,那么显然指定N query在非正式意义上是急切的,即您在+1查询之前对其求值。在引号3中使用eager是错误的,它们的意思类似于,同时指定N&通过连接+1。PS请给出一个链接。我认为我们在第三个报价中混淆了急切加载和急切获取。我相信作者会使用“渴望负载”这个词,因为这个词更为常见;使用“急取”必须有一个原因。通过使用联接,我确实看到了关联对象的数据是如何获取的。这句话实际上说明了关联对象的数据是如何存储的;通过联接构建关联对象可能超出了此引用的范围。可能是作者所说的在不加载关联的情况下从联接表中进行选择。Foo.选择“foos.*,bar.baz作为baz”。连接:bar。这可用于计数或平均值等聚合。但事实上这并不常见。@philipxy-你能澄清一下你的意思是什么样的链接吗?这三段引语来自一本书,而不是我可以链接到的页面。如果有帮助的话,我可以在亚马逊上链接到这本书的页面,但我确实已经提到了这本书的标题,所以我不确定这会带来多大的额外好处。