我有一个products
表和product_variants
,与has_many
有<{1}}个关系
我想检索所有可用的产品及其可用的变体。
products
型号:
Product
和class Product < ApplicationRecord
scope :only_enabled, -> { where(status: :enabled) }
scope :only_in_stock, -> { where('quantity > 0') }
scope :only_available, -> { only_enabled.only_in_stock }
end
型号:
ProductVariant
如何使用class ProductVariant < ApplicationRecord
scope :only_enabled, -> { where(status: :enabled) }
scope :only_in_stock, -> { where('inventory_quantity > 0') }
scope :only_available, -> { only_enabled.only_in_stock }
end
检索所有Product.only_available
,如果变体与ProductVariant.only_available
范围不匹配,则不排除产品?
我尝试过使用此查询:
ProductVariant.only_available
问题是它似乎没有过滤不可用的变体。
答案 0 :(得分:0)
我使用where
来过滤关联。
@store.products.only_available
.eager_load(:product_variants)
.where('product_variants IS NULL OR (product_variants.status = 1 AND product_variants.inventory_quantity > 0)')
我必须这样做association IS NULL OR ( ... )
才能使其按照我期望的方式工作。