nil的未定义方法`*':NilClass

时间:2012-12-27 01:28:24

标签: ruby-on-rails ruby acts-as-shopping-cart

使用acts-as-shopping-cart gem

时出现此错误
undefined method `*' for nil:NilClass  Extracted source (around line #5):

2:
3: <%= render :partial => 'shopping_cart_item', :collection => @shopping_cart.shopping_cart_items %>
4:
5:  SubTotal:<%= number_to_currency @shopping_cart.subtotal %>
6:  Taxes:<%= number_to_currency @shopping_cart.taxes %>
7:  Total:<%= number_to_currency @shopping_cart.total %>

字段似乎在gem源中定义。

show.html.erb

<h1>Shopping Cart</h1>

<%= render :partial => 'shopping_cart_item', :collection => @shopping_cart.shopping_cart_items %>

<div><b>SubTotal:</b><%= number_to_currency @shopping_cart.subtotal %></div>
<div><b>Taxes:</b><%= number_to_currency @shopping_cart.taxes %></div>
<div><b>Total:</b><%= number_to_currency @shopping_cart.total %></div>

shopping_cart.rb

class ShoppingCart < ActiveRecord::Base
  acts_as_shopping_cart

  def tax_pct
    8.25
  end

  def taxes
    (subtotal - 10) * tax_pct
  end

end

应用程序跟踪

  

应用程序/视图/ shopping_carts / show.html.erb:5:在   `_app_views_shopping_carts_show_html_erb__2338506009803118188_70153042369260'

shopping_carts.controller

class ShoppingCartsController < ApplicationController
  before_filter :extract_shopping_cart

  def create
    @product = Product.find(params[:product_id])
    @shopping_cart.add(@product, @product.price)
    redirect_to shopping_cart_path
  end

  def show

  end

  private
  def extract_shopping_cart
    shopping_cart_id = session[:shopping_cart_id]
    @shopping_cart = session[:shopping_cart_id] ? ShoppingCart.find(shopping_cart_id) : ShoppingCart.create
    session[:shopping_cart_id] = @shopping_cart.id
  end
end

我的回购

https://github.com/atbyrd/Bootstrapped_Devise

1 个答案:

答案 0 :(得分:2)

只有当您将未定价的商品添加到购物车时才会出现此问题。

所以你需要确保所有产品都有价格,可能使用验证,也许使用before_save功能,但要确保所有产品都有价格,这个问题就会消失。

ps 在测试之前不要忘记从数据库中清除任何未定价的产品