поиск записей где через несколько ассоциаций - PullRequest
0 голосов
/ 28 июня 2019

Я хочу найти несколько записей на нескольких уровнях ассоциаций.

Мне нужно перебрать модель Orders с помощью:

Заказы, где Order.cart.line_items (итерация по line_items)

line_item.shop_product.product == vendor_products

В настоящее время я делаю это с:

vendor_products = VendorProduct.where(vendor_id: current_user.id)
vendor_shop_products = ShopProduct.where(product: vendor_products.map { |vp| vp.product_id})
vendor_line_items = LineItem.where(shop_product: vendor_shop_products)
vendor_carts = Cart.where(line_items: vendor_line_items)
vendor_orders = Order.where(cart: vendor_carts)

Мне интересно, а также я предполагаю, что есть намного-намного лучший способ сделать это. Как я могу сократить это?

Модель:

class LineItem < ApplicationRecord
  belongs_to :shop_product, optional: true
  belongs_to :product, optional: true
  belongs_to :cart

class Order < ApplicationRecord
  belongs_to :cart, optional: true

class Product < ApplicationRecord
  has_one :shop_product
  has_one :vendor_product

class ShopProduct < ApplicationRecord
  belongs_to :product, optional: true
  has_one :order

class VendorProduct < ApplicationRecord
  belongs_to :product
  belongs_to :vendor, :class_name => "User"

class Cart < ApplicationRecord
  has_many :line_items, dependent: :destroy
  has_one :order

1 Ответ

1 голос
/ 28 июня 2019

Я бы начал с чего-то вроде этого:

Order.joins(cart: { line_items: { product: { vendor_product: :vendor } } })
     .where(vendor: { id: current_user.id })

Полезные значения в руководствах по Rails:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...