Как удовлетворить ассоциацию нагрузки для массива модельных записей
У меня есть массив записей модели Rails. Можно ли желать загружать связь для всех этих записей за один раз (запрос)?
Иногда у меня только массив, а не AR:: Scope. И иногда я хочу, чтобы динамически выбирать, что нужно загружать позже.
Ответы
Ответ 1
В Rails 3 можно использовать preloader, чтобы присоединить ассоциации к существующим записям.
ActiveRecord::Associations::Preloader.new(posts,:comments).run()
В Rails 4.1+ сигнатура вызова немного изменилась:
ActiveRecord::Associations::Preloader.new.preload(posts,:comments)
Ответ 2
Ну, вы можете переделать эти объекты. Map ': id' над вашим массивом, чтобы получить идентификаторы записей, а затем переделать, на этот раз с нетерпением загрузки.
Если ваш массив, скажем, Post
записей модели, posts
, то это будет:
Post.find(posts.map &:id).includes(:blah)