Я хочу найти несколько записей на нескольких уровнях ассоциаций.
Мне нужно перебрать модель 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