代码之家  ›  专栏  ›  技术社区  ›  anonn023432

Rails记录至少有一个与属性值的关联

  •  0
  • anonn023432  · 技术社区  · 6 年前

    Purchase 哪一个 has_many products . 我想把所有的 purchases product 已经全部付清了。

    Product 有一个 status status 4 意味着它已经全部付清了。

    我试着在 购买 型号:

    scope :full_paid, -> {
      joins(:products).where(products: { status: 4 })
    }
    

    但这只会吸引所有现有的 产品

    2 回复  |  直到 6 年前
        1
  •  1
  •   Shiko    6 年前

    有几种方法可以做到这一点:

    1) 使用 left_outer_joins

    scope :full_paid, -> {
      left_outer_joins(:products)
          .select("purchase_id, COUNT(CASE WHEN products.status= 4 THEN 1 ELSE 0 END) as paid")
          .having("paid > 0")
          .group("products.purchase_id")
    }
    

    2) 类似于 得到 独特的购买 DB侧 :

    Product.select(:purchase_id).where(status: 4).group(:purchase_id)
    

    我想可能还有其他方法

        2
  •  0
  •   John Skiles Skinner    6 年前

    我认为这样做可以,尽管我不确定这是最好的方法:

    Product.where(status: 4).map{|prod| prod.purchase}.uniq