nil不能被强制转换为BigDecimal

时间:2012-02-20 23:49:58

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

嗨,我们正在使用rails 3 ruby​​ 1.9环境玩RoR 我被卡住了

  

nil无法强制进入BigDecimal

错误

我需要获得购物车内产品的总成本 我知道问题在哪里(我认为),但我几乎做了所有事情

车/ 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

我的第二个选择是

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

但仍然无法正常工作

感谢我们更多的力量!

1 个答案:

答案 0 :(得分:0)

问题出在您的cart.rb型号中:

def total_price
  product.price  * quantity
end

您的购物车中没有单品;您的购物车中有许多产品。您需要汇总购物车中所有订单项的所有价格。 (如果在客户承诺以旧价格购买产品后产品价格发生变化,您希望直接使用订单项而不是产品。)

你将如何解决这个问题取决于你的模型的细节,但你会找到这样的东西:

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

这将对total_price集合中的每个项目运行line_items方法,构建所有项目的列表,然后sum列表。