Rails has_many через промежуточную модель

В рельсах есть способ выбрать транзитивные модели. У нас следующая структура модели.

У покупателя много покупок, а у покупок много заказов. Не существует прямой связи между клиентом и моделью заказа. Они могут быть связаны через модель покупки. Теперь я хочу получить все заказы, принадлежащие клиенту. Есть ли способ добиться этого с помощью одного запроса. Наши текущие модели выглядят примерно так.

Customer
    - customer_id

Purchase
    - purchase_id
    - customer_id

Order
    - order_id
    - purchase_id
    - status

Мой вариант использования состоит в том, чтобы предоставить объект клиента, перечислить все заказы клиента, которые находятся в определенном состоянии (например, status = 'Complete').

Строка SQL будет выглядеть примерно так

SELECT purchase_id, order_id FROM Customer c INNER JOIN Purchase p ON p.customer_id = c.customer_id INNER JOIN Order o ON o.purchase_id = p.purchase_id WHERE o.status = 'Complete';

1 ответ

Решение

Вы можете сделать с этим:

Order.select('purchases.id AS purchase_id, orders.id AS order_id').joins(purchase: :customer).where('orders.status = ?', 'Complete')

Я надеюсь, что это поможет вам.

Другие вопросы по тегам