我正在用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
如果有人能帮我解决这个问题,那就太好了。
我发现了问题。我不得不把每一个属性都归因于它的类型。
现在我有以下行:
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
也许这对其他人也有帮助。
编辑:复制错误的代码剪切