0

RoR3.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

誰かがその問題で私を半減させることができれば、それは素晴らしいことです。

4

1 に答える 1

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

多分これは他の人にも役立ちます。

編集:コピーされた間違ったコードが切り取られた

于 2013-02-08T17:23:23.487 に答える