我有一个简单的三向模型关联,其中Product
可以属于多个Categories
。
Product has_many ProductCategories
ProductCategories belongs_to Product
ProductCategories belongs_to Category
Category has_many ProductCategories
我正在尝试创建一个范围,该范围会返回Products
以及至少一个关联visible=true
的所有ProductCategories
。
这个范围怎么样?
这是我尝试过的:
scope :visible, -> { where(visible: true).where(product_categories.size > 0) }
答案 0 :(得分:1)
在 product.rb :
中尝试此操作scope :visible, -> { where(visible: true).joins(:product_categories).uniq }
它应生成此SQL查询:
SELECT DISTINCT products.* FROM products
INNER JOIN product_categories ON product_categories.product_id = products.id
或者,用英语:“返回所有至少有一个产品类别的产品”。请注意,包含多个产品类别的产品会多次显示,因此我们使用uniq
进行DISTINCT
查询。