ActiveRecord的::协会::预载只预装了一些关系的

问题描述 投票:1回答:1

我使用的find_by_sql随后的ActiveRecord ::协会::预载预加载一些关系。我可以在它预装的关系控制台中看到,但出于某种原因,还是懒加载as_json通话过程中的相关记录部分。

在这种特殊情况下,返回的find_by_sql 1872年车型的阵列。每一个模型都应该至少有一个相关的细节模型。我用下面的代码预装协会

preload = [
  details: %i[account department]
]
ActiveRecord::Associations::Preloader.new.preload(results, preload)

要检查所有的关联都预装,我用下面的代码

results.select{|r| r.association(:details).loaded? == false}.length
2
results.find_index{|r| r.association(:details).loaded? == false}
192

我想知道如果由于某种原因,预加载程序将仅预加载的记录固定数量,但并没有装载的记录的索引were't通过彼此或朝向的结果阵列的一端。他们是在指数192和472。

这里是我的as_json代码

json = results.as_json(
  include: [
    details: {include: %i[department account]}
  ]
)

是有一些原因,只预装了一些关系。如果我通过不同的搜索参数的find_by_sql,它返回更多的机型更预装的关系,以及没有预装更多的关系。如果我使用返回少量的型号搜索参数,一切都预装。

ruby-on-rails preload
1个回答
1
投票

我发现结果数组包含相同型号的两倍,因为在我的SQL连接条件。导轨只为重复的车型之一预装的关联。

© www.soinside.com 2019 - 2024. All rights reserved.