我使用find_by_sql,然后使用ActiveRecord::Associations::Preloader来预加载一些关系。我可以在控制台中看到它正在预加载关系,但是由于某些原因,它在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]}
]
)有没有什么原因它只预载了一些关系。如果我将不同的搜索参数传递给find_by_sql,它将返回更多模型、更多预加载的关系和更多未预加载的关系。如果我使用返回少量模型的搜索参数,则所有内容都是预加载的。
发布于 2019-02-09 05:02:25
我发现由于我的SQL中的联接条件,结果数组包含相同的模型两次。Rails仅预加载了其中一个重复模型的关联。
https://stackoverflow.com/questions/54598510
复制相似问题