【问题标题】:Rails Scope - Get all Products where ProductCategories.size > 0Rails 范围 - 获取 ProductCategories.size > 0 的所有产品
【发布时间】:2014-12-02 06:57:18
【问题描述】:

我有一个简单的三向模型关联,其中Product 可以属于多个Categories

Product has_many ProductCategories

ProductCategories belongs_to Product
ProductCategories belongs_to Category

Category has_many ProductCategories

我正在尝试创建一个范围,它返回所有具有visible=trueProducts 以及至少一个关联的ProductCategories

这个范围会是什么样子?

这是我尝试过的:

scope :visible, -> { where(visible: true).where(product_categories.size > 0) }

【问题讨论】:

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


    【解决方案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 查询。

    【讨论】:

      猜你喜欢
      • 2016-05-21
      • 1970-01-01
      • 2020-09-28
      • 2012-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多