2014-10-07 60 views
0

我有一個簡單的三路模型關聯,其中Product可以屬於多個CategoriesRails範圍 - 獲取所有產品,其中產品分類大小> 0

Product has_many ProductCategories 

ProductCategories belongs_to Product 
ProductCategories belongs_to Category 

Category has_many ProductCategories 

我試圖創建一個返回所有Productsvisible=true至少一個相關ProductCategories一個範圍。

這個範圍如何看起來像?

這是我已經試過:

scope :visible, -> { where(visible: true).where(product_categories.size > 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