You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中布尔列为true时排除行统计库存总价值与数量(HAML场景)

解决方案:过滤归档商品的统计逻辑

核心问题是要在统计库存价值和商品总数时排除archived = true的商品,这部分逻辑应该放在模型层(而不是直接修改HAML视图)——视图只负责展示数据,把业务逻辑放在模型更符合MVC设计原则,也方便后续复用。

步骤1:在Product模型添加可复用的筛选作用域(可选但推荐)

先在Product模型里定义一个作用域,专门用来筛选未归档的商品,后续其他业务场景需要过滤时也能直接调用:

# app/models/product.rb
scope :active, -> { where(archived: false) }

步骤2:修改Store模型的统计方法

找到Store模型中定义products_stock_value和products_count的代码块,修改这两个方法,加入归档商品的过滤条件:

# app/models/store.rb
# 计算未归档商品的库存总价值(请根据实际表字段替换price和stock_quantity)
def products_stock_value
  products.active.sum("price * stock_quantity")
end

# 统计未归档商品的总数
def products_count
  products.active.count
end

如果不想用作用域,也可以直接在方法内写过滤逻辑:

def products_stock_value
  products.where(archived: false).sum("price * stock_quantity")
end

def products_count
  products.where(archived: false).count
end

额外说明

  • 你现有的HAML代码完全不需要修改,因为视图只是渲染current_store提供的数据,我们已经在模型层把归档商品排除在统计结果之外了。
  • 注意替换代码中的price和stock_quantity为你表中实际的单价字段和库存数量字段,比如如果单价是cost_price、库存字段是stock_qty,就改成cost_price * stock_qty。

内容的提问来源于stack exchange,提问作者Fireworrks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:47:46