首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ActiveRecord::Associations::Preloader仅预加载部分关系

ActiveRecord::Associations::Preloader仅预加载部分关系
EN

Stack Overflow用户
提问于 2019-02-09 02:46:55
回答 1查看 263关注 0票数 1

我使用find_by_sql,然后使用ActiveRecord::Associations::Preloader来预加载一些关系。我可以在控制台中看到它正在预加载关系,但是由于某些原因,它在as_json调用期间仍然延迟加载相关记录的一部分。

在本例中,find_by_sql返回了一个包含1872个型号的数组。每个模型都应该至少有一个关联的详细模型。我使用了以下代码来预加载关联

代码语言:javascript
复制
preload = [
  details: %i[account department]
]
ActiveRecord::Associations::Preloader.new.preload(results, preload)

为了检查是否所有关联都已预加载,我使用了以下代码

代码语言:javascript
复制
results.select{|r| r.association(:details).loaded? == false}.length
2
results.find_index{|r| r.association(:details).loaded? == false}
192

我想知道是不是由于某些原因,预加载器只会预加载固定数量的记录,但是没有加载的记录的索引不是彼此的,也不是指向结果数组的一端。他们在指数192和472。

下面是我的as_json代码

代码语言:javascript
复制
json = results.as_json(
  include: [
    details: {include: %i[department account]}
  ]
)

有没有什么原因它只预载了一些关系。如果我将不同的搜索参数传递给find_by_sql,它将返回更多模型、更多预加载的关系和更多未预加载的关系。如果我使用返回少量模型的搜索参数,则所有内容都是预加载的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-09 05:02:25

我发现由于我的SQL中的联接条件,结果数组包含相同的模型两次。Rails仅预加载了其中一个重复模型的关联。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54598510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档