Предварительная загрузка ассоциаций уже загруженного отношения - PullRequest
0 голосов
/ 13 октября 2019

Я хотел бы предварительно загрузить ассоциации для уже загруженного отношения, чтобы избежать проблемы N + 1. Дело в том, что я не могу переписать исходный запрос, потому что хочу предварительно загружать ассоциации только в определенных случаях, что-то вроде этого:

results = SomeModel.where(some_condition).load
# do some stuff with the results
if some_condition
  preload_associations(results, [:some_association, :another_association])
  # do some stuff with the results and preloaded associations
end

Я нашел это возможным только для ранних версий rails, используя метод preload_associations . Я знаю, что метод был предназначен только для внутреннего использования, но я хотел бы, если есть способ добиться того же для рельсов 5 +?

1 Ответ

1 голос
/ 14 октября 2019

Современные рельсы используют вспомогательный класс для обработки этого: https://www.rubydoc.info/docs/rails/4.1.7/ActiveRecord/Associations/Preloader

В вашем примере, я полагаю, вы бы сделали что-то вроде:

results = SomeModel.where(some_condition).load
# do some stuff with the results
if some_condition
  ActiveRecord::Associations::Preloader.new.preload(results, [:some_association, :another_association])
  # do some stuff with the results and preloaded associations
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...