将nil作为和函数处理为零

Jas*_*rga 19 ruby ruby-on-rails ruby-on-rails-3

我有一个卖家模型has_many项目.

我想得到所有卖家物品的总销售价格.

在seller.rb我有

def total_item_cost 
  items.to_a.sum(&:sale_price)
end
Run Code Online (Sandbox Code Playgroud)

如果所有商品都有售价,这样可以正常使用.
但是,如果它们尚未售出,sale_price则为零和total_item_cost休息.

在我的应用程序中,sale_price可以是零或零.

在我的total_item_cost方法中,我如何将nil值视为零?

dbe*_*hur 50

items.map(&:sale_price).compact.sum
Run Code Online (Sandbox Code Playgroud)

要么

items.map(&:sale_price).sum(&:to_i)
Run Code Online (Sandbox Code Playgroud)


Dig*_*oss 36

一种方法是:

items.to_a.sum { |e| e.sale_price.to_i } # or to_f, whatever you are using
Run Code Online (Sandbox Code Playgroud)

方法,如#to_f#to_i将转向nil0.