Я использую 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, он возвращает больше моделей, больше предварительно загруженных отношений и больше отношений, которые не были предварительно загружены.Если я использую параметры поиска, которые возвращают небольшое количество моделей, все предварительно загружено.