ruby-on-rails 在求和函数中将nil视为零

yyhrrdl8  于 2022-11-26  发布在  Ruby
关注(0)|答案(5)|浏览(122)

我的卖家模型有许多件物品(_M)。
我想知道卖家所有物品的总销售。
在seller.rb中我有

def total_item_cost 
  items.to_a.sum(&:sale_price)
end

如果所有项目都有一个销售价格,这就可以了。
然而,如果它们还没有被卖出,sale_price为零,total_item_cost中断。
在我的应用程序中,sale_price可以是nil,也可以是0。
在我的total_item_cost方法中,如何将nil值视为零?

2w3kk1z5

2w3kk1z51#

items.map(&:sale_price).compact.sum

items.map(&:sale_price).sum(&:to_i)
moiiocjp

moiiocjp2#

其中一个办法是:

items.to_a.sum { |e| e.sale_price.to_i } # or to_f, whatever you are using

#to_f#to_i这样的方法会将nil转换为0

disbfnqx

disbfnqx3#

拒绝零值。items.to_a.reject{|x| x.sales_price.nil?}.sum(&:sale_price)

jv4diomz

jv4diomz4#

假设sales_price是数据库中的一列:

items.sum(:sales_price)
u0sqgete

u0sqgete5#

# Ruby 2.7+
items.filter_map(&:sale_price).sum

相关问题