Rails Error: Undefined method `add_product' for nil:NilClass

Rails Error: Undefined method `add_product' for nil:NilClass

我是 Rails 的新手,所以我可能犯了一个愚蠢的错误,需要有人指出。

构建一个小型购物车应用程序。当我点击 'Add to Cart' 时,它会抛出这个错误:

NoMethodError in LineItemsController#create
 undefined method `add_product' for nil:NilClass

参数:

{"authenticity_token"=>"uZ6zOfA237VBzt3Pz2tEBESzjv2pg+Vhx73DTolL8f76ANS80qiU6+wcN8Tvq/r+CSZvzxnkKll/ZJl2H2XePQ==",
 "product_id"=>"1"}

代码如下:

line_items_controller

def create
    product = Product.find(params[:product_id])
    @line_item = @cart.add_product(product.id)

    respond_to do |format|
      if @line_item.save
        format.html { redirect_to customer_cart_path }
        format.json { render :show, status: :created, location: @line_item }
      else
        format.html { render :new }
        format.json { render json: @line_item.errors, status: :unprocessable_entity }
      end
    end
  end

购物车型号:

class Cart < ActiveRecord::Base
has_many :line_items, dependent: :destroy
belongs_to :user

def add_product(product_id)
    current_item = line_items.find_by(product_id: product_id)
    if current_item
        current_item.quantity += 1
    else
        current_item = line_items.build(product_id: product_id)
    end
    current_item
end

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

添加到购物车按钮:

<%= button_to 'Add to Cart', line_items_path(product_id: product) %>

提前致谢!

您尚未定义 @cart 实例变量并在 LineItemsControllercreate 方法中访问其 add_product 方法。

@line_item = @cart.add_product(product.id)  # <== HERE

在您的代码中:

def create
product = Product.find(params[:product_id])
@line_item = @cart.add_product(product.id)  

行 [3],使用 @cart,但 @cart 从未在它之前设置,所以它不知道它在那个时候是什么。

所以使用前需要设置@cart。例如:

@cart = Cart.find(params[:cart_id]

此外,您还需要更新代码:

<%= button_to 'Add to Cart', line_items_path(product_id: product) %>

至(如果您的 cart 对象存在于此处):

<%= button_to 'Add to Cart', line_items_path(product_id: product, cart_id: cart) %>