零无法强制进入Float

时间:2013-02-08 16:34:15

标签: ruby-on-rails ruby-on-rails-3

我正在使用RoR 3.2.11对计费系统进行编码。

现在我想计算账单总额。为此,我设计了这样的模型:

class Bill < ActiveRecord::Base
  belongs_to :customer
  has_many :bill_items, :dependent => :destroy
  has_many :articles, :through => :bill_items
  attr_accessible :date, :discount, :state, :category, :customer_id, :bill_items_attributes
  accepts_nested_attributes_for :bill_items, :reject_if => lambda { |a| a[:count].blank? }, :allow_destroy => true

  def total
     bill_items.inject(0) { |acc, bill_items| acc + (bill_items.count * bill_items.article.price) } - discount
  end
end

如果数据库中存储了某些内容,那么效果很好。如果“bill_item”为空,我会收到以下消息:

TypeError in Bills# edit
nil can't be coerced into Float

如果有人能够解决这个问题,那就太棒了。

1 个答案:

答案 0 :(得分:0)

我发现了问题。 我必须将每个属性都转换为它的类型。

现在我有以下几行:

def total
     bill_items.inject(0) { |acc, bill_items| acc + (bill_items.count.to_i * bill_items.article.price.to_f) } - discount.to_f
end

也许这对其他人也有帮助。

编辑: 复制了错误的代码段