Ruby on rails ActiveRecord::Associations::Preload仅预加载部分关系

Ruby on rails ActiveRecord::Associations::Preload仅预加载部分关系,ruby-on-rails,preload,Ruby On Rails,Preload,我使用find_by_sql然后使用ActiveRecord::Associations::preload来预加载一些关系。我可以在控制台中看到,它正在预加载关系,但由于某种原因,它仍然在as_json调用期间延迟加载部分相关记录 在本例中,find_by_sql返回了1872个模型的数组。每个模型应至少有一个关联的详细信息模型。我使用下面的代码预加载关联 preload = [ details: %i[account department] ] ActiveRecord::Associat

我使用find_by_sql然后使用ActiveRecord::Associations::preload来预加载一些关系。我可以在控制台中看到,它正在预加载关系,但由于某种原因,它仍然在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
我想知道,出于某种原因,预加载程序是否只预加载固定数量的记录,但未加载的记录的索引不是彼此的,也不是朝向结果数组的一端。它们的指数分别为192和472

这是我的as_json代码

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

为什么它只预加载了一些关系。如果我传递不同的搜索参数来通过sql查找,它会返回更多的模型、更多的预加载关系和更多的未预加载关系。如果使用返回少量模型的搜索参数,则所有内容都会预加载。

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