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

如何计算Campaign模型的总价格?现有代码报错求解

问题分析与解决方案

你的代码报错是因为campaign.items.sum(item.price * item.quantity)中的item是未定义变量,而且ActiveRecord的sum方法如果直接传表达式(而非块),需要用数据库能识别的字段名语法。下面提供两种可行方案:

方案一:数据库层面计算(推荐)

直接让数据库计算总价,性能更优,尤其数据量大时:

def campaign_subtotal(campaign)
  campaign.items.sum('price * quantity')
end

如果想避免硬写SQL字符串,用Arel更安全(防止SQL注入):

def campaign_subtotal(campaign)
  item_table = Item.arel_table
  campaign.items.sum(item_table[:price].multiply(item_table[:quantity]))
end

方案二:Ruby内存层面计算

如果已经将campaign.items加载到内存中,可用Enumerable的sum方法(带块):

def campaign_subtotal(campaign)
  campaign.items.sum { |item| item.price * item.quantity }
end

注意:这种方式会把所有item对象加载到内存,数据量大时性能不如数据库层面的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 12:35:25