0

使用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 源中定义的。

显示.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>

购物车.rb

class ShoppingCart < ActiveRecord::Base
  acts_as_shopping_cart

  def tax_pct
    8.25
  end

  def taxes
    (subtotal - 10) * tax_pct
  end

end

应用程序跟踪

app/views/shopping_carts/show.html.erb:5:in `_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

4

1 回答 1

2

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

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

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

于 2012-12-27T05:03:05.050 回答