2012-02-20 11 views
1
に強制することはできません

やあみんな、私がnilのBigDecimalnilでのBigDecimal

に強制することはできません

に捕まってしまったレール3ルビー1.9 の環境でRoRので遊んでイムエラー

私は、問題がある、私が知っているカート (と思う)が、私はほとんどすべてのことをした内の製品の総コストを取得する必要があります

カート/ show.html.rb

<div class="cart_title" >Your Cart</div> 
    <table> 
     <% for item in @cart.line_items %> 
    <tr> 
     <td><%= item.quantity %>&times;</td> 
     <td><%= item.product.title %></td> 
    <td class="item_price" ><%= number_to_currency(item.total_price) %></td> 
    </tr> 
    <% end %> 
     <tr class="total_line" > 
     <td colspan="2" >Total</td> 
     <td class="total_cell" ><%= number_to_currency(@cart.total_price) %></td> 
    </tr> 
    </table> 
     <%= button_to 'Empty cart', @cart, :method => :delete, 
     :confirm => 'Are you sure?' %> 

モデル/ line_item.rb

def total_price 
    line_items.to_a.sum { |item| item.total_price } 
    end 

モデル/ cart.rb

def total_price 
    product.price * quantity 
    end 

私の2番目のオプションは、

def total_price 
    if product.price 
     product.price * quantity 
    else 
     product.price = "0.0".to_d 
    end 
    end 
です

彼の仕事はありません

私たちに感謝!

答えて

0

問題は、あなたのcart.rbモデルである:

def total_price 
    product.price * quantity 
end 

あなたのカート内の単一の製品を持っていません。あなたは商品をあなたのカートに入れています。あなたのカートにあるのすべての価格のすべての価格を合計する必要があります。 (クライアントが古い価格で商品を購入することを約束した後に商品価格が変更された場合は、商品ではなく広告申込情報を直接使用することをお勧めします)。

これをどのように修正するかは、お使いのモデルがありますが、このような何かを探していることになります:

def total_price 
    line_items.to_a.each(&:total_price).sum 
end 

これはリストを、あなたのline_itemsコレクション内のすべての項目にtotal_price方法を実行して、それらすべてのリストを作成し、その後sumます。

+0

どうすればいいですか?あなたは私にRoRのおかげで新しい一例を与えることができます:) – Led