Rails范围 - 获取ProductCategories.size>所有产品0

时间:2014-10-07 18:39:34

标签: ruby-on-rails ruby postgresql model scope

我有一个简单的三向模型关联,其中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) }

1 个答案:

答案 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查询。