我使用的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,它返回更多的机型更预装的关系,以及没有预装更多的关系。如果我使用返回少量的型号搜索参数,一切都预装。
我发现结果数组包含相同型号的两倍,因为在我的SQL连接条件。导轨只为重复的车型之一预装的关联。