Стремительная загрузка в «обоих направлениях» - PullRequest
1 голос
/ 25 января 2011

Стремительная загрузка не работает, как я ожидаю.

У меня есть Продукты , которые имеют_мани Вариантов , и, конечно, каждый Вариант принадлежит_ к Product .

Я использую такой код для загрузки продукта и всех его вариантов:

products = Product.includes(:variants)

Это работает: все продукты и все варианты загружаются только с двумязапросы.Однако продукт каждого варианта не загружен, поэтому следующий код вызывает другой SQL-запрос:

puts products[0].variants[0].product.title

Почему это так и как я могу это исправить?Полагаю, что Product.includes(:variants => :product) будет работать, но это вызовет еще один большой и ненужный SQL-запрос, поскольку данные о продуктах уже доступны.

1 Ответ

1 голос
/ 25 января 2011

Active Record будет загружать ассоциацию только на указанном вами уровне. С его точки зрения, variant.product будет рассматриваться как еще один уровень ассоциации. Так что, если вы хотите загрузить его, вам нужно сделать:

products = Product.includes({:variants => :product})
...