2016-11-16 1 views
1

Моего объектом моделью идет немного что-то вроде этого:Force полного объект нагрузка с жадной загрузкой и вложенными объектами

Order 
    has_many line items 
    has_many transactions 
    has_many products through line items 
Line Items 
    has_one product 

Итак, чтобы получить все заказы на продукт Я собираюсь:

product = Product.find(1) 
Order.includes(:transactions, line_items: [:product]).where(line_items: {product: product}) 

Проблема в том, что если в заказе есть 5 позиций, я хочу, чтобы все 5 позиций загружались, когда я смотрю на объект заказа. Однако, используя вышеприведенный код, я получаю только позицию с указанным продуктом. Есть ли способ полностью загрузить объект заказа, не переходя индивидуально для каждого элемента? Просто захотите загрузить весь объект.

ответ

1

Это будет трудно сделать только в одном запросе. Самый простой я мог бы получить, используя только методы ActiveRecord был таков:

Order.includes(:transactions, line_items: [:product]) 
    .where(id: LineItem.where(product: product).pluck(:order_id)) 

Я не знаю много о Arel, но я думаю, что это могло бы быть в состоянии сделать это в одном запросе, а не два.

+0

Это работает! Лучший способ, которым я видел это до сих пор. Спасибо :) – user2317084

Смежные вопросы