将范围应用于Rails上的关联

时间:2018-04-26 14:38:20

标签: ruby-on-rails rails-activerecord

我有一个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

问题是它似乎没有过滤不可用的变体。

1 个答案:

答案 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 ( ... )才能使其按照我期望的方式工作。