Rails - 加入条件

时间:2016-02-06 15:03:24

标签: ruby-on-rails activerecord

我有2个模型,ItemStock Keeping Unit

Stock Keeping Units属于Items,并且给定的商品可以有多个库存单位,每个单位的状态为已售出或未售出。

按定义 -

  • 库存商品是具有未售出的库存单位(已售出=假)
  • 的商品
  • 缺货商品是没有未售出的库存单位(已售出=假)
  • 的商品

对于库存项目,这里是范围 -

    scope :in_stock, -> {
      joins(:stock_keeping_units).distinct(:item).where('stock_keeping_units.sold = FALSE')
    }

“缺货”商品的范围如何?我已经尝试了以下,但它不会得到没有股票的物品。

scope :out_of_stock, -> {
    joins(:stock_keeping_units).where('stock_keeping_units.sold = TRUE')
}

3 个答案:

答案 0 :(得分:1)

使用in_stock范围:

 scope :out_of_stock, -> { where.not(id: in_stock.select('items.id')) }

答案 1 :(得分:0)

试试这个lambda标志对我来说有时也不起作用

scope :out_of_stock, lambda {
    joins(:stock_keeping_units).where(:stock_keeping_units(:sold => TRUE))
}

答案 2 :(得分:0)

如果您使用includes代替joins,则会获得左外连接,这会为您提供任何没有库存单位的项目。

scope :out_of_stock, -> {
  includes(:stock_keeping_units).where.not(stock_keeping_units: { sold: true })
}