我有2个模型,Item
和Stock 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')
}
答案 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 })
}