是否有允许我仅显示具有库存变体的产品的范围?

Is there a scope to allow me to show only products with variants with stock?

我想更改 "products" 我的 Spree 3.0.x 商店的概览,以仅显示具有一种或多种可供应变体的产品。这将在正常范围之上(可用,以当前货币计价)。 它也会影响分类列表。

不过,我不想影响搜索页面:搜索时,应该会显示不可用的产品。

据我所知,在 Spree:ProductSpree::Product scopes.rb 上都没有这样的范围。

如果没有这样的作用域,joins- 和 includes 的正确链是什么来将这个作用域写在 Product 上?

我可能会从以下内容开始:

Spree::Product.joins(
  variants_including_master: :stock_items
).group('spree_products.id').having("SUM(count_on_hand) > 0")

这应该让您接近您正在寻找的东西。

您可以使用此扩展程序:

https://github.com/swrobel/spree_zero_stock_products/

默认情况下,它只是将范围添加到 Spree::Product,而不更改默认搜索范围。您可以方便地使用提供的 :on_hand 范围。