include..references..where和include..where..references之间的区别

时间:2018-12-27 03:25:16

标签: ruby-on-rails

我正在使用map并阅读类似的项目代码

Rails5.2

在互联网上搜索时,我看到了类似link

的示例
blog = Blog.includes(:posts).references(:posts).where(uuid: params[:uuid])

Blog.includes(:posts).where(name: 'Blog 1').references(:posts) 子句之前或之后放置where子句是否有区别?

2 个答案:

答案 0 :(得分:1)

您应该从reference阅读val Mul1 = Sum1.zipWith(Sum2)(mul) Mul1.onComplete { ... } joinsincludespreloadeager_load

注意:包含项并不总是创建单独的查询。

references用于references之后和includes子句之前(我在将项目从rails-3迁移到rails-5时用于解决列歧义问题)

还请阅读this

答案 1 :(得分:0)

如果在此处选中此link,则可以看到引用的定义。

简而言之,includes将运行一个单独的查询来获取您所有的posts(在您的示例中),而不是每次循环浏览博客时都获取它们。

现在作为参考,您想在where上添加一个posts条件,您需要添加它。就您而言,您无需包含它。

小例子:

blog = Blog.includes(:posts).where(uuid: params[:uuid])->将运行查询以从blogs获取博客,并运行查询以获取与此博客相关的所有posts

在另一种情况下,例如:blog = Blog.includes(:posts).references(:posts).where(posts: { name: 'test' }),您将不得不使用references,否则您的where条件将引发错误