意外的nil对象

时间:2012-02-19 12:35:25

标签: ruby-on-rails ruby methods

我目前正在开发我的项目,而且我是Ruby on Rails的新手 我正在使用购物车将相同的产品分组到一个订单项中 并把我带到了这个错误:

    You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.+

我无法理解为什么找不到创建的方法

line_item_controller.rb:

  def create
    @cart = current_cart
    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(@line_item.cart,
          :notice => 'Line item was successfully created.') }
        format.xml  { render :xml => @line_item,
          :status => :created, :location => @line_item }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @line_item.errors,
          :status => :unprocessable_entity }
      end
    end
  end

Cart模块的内部:

 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

我的观点是购物车秀

<% for item in @cart.line_items %>
<li><%= item.quantity %> &times; <%= item.product.title %></li>
<% end %>

编辑:

我认真地说我不知道​​发生了什么,但是当我输入时:

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

这条线确切地说它走得很好

current_item.quantity += 1

有人可以解释刚刚发生了什么吗?

2 个答案:

答案 0 :(得分:1)

而不是current_item.quantity += 1尝试current_item.quantity = current_item.quantity.to_i + 1 我所做的是,如果current_item.quantitynilcurrent_item.quantity.to_i将是= 0,否则它将获得current_item.quantity的整数值

答案 1 :(得分:0)

从给定的代码中,我怀疑只是在行current_item.quantity += 1之后。我猜它有时候是零,这就是你得到例外的原因。

执行以下操作时,请确保将数量值初始化为1

current_item = line_items.build(:product_id => product_id)

注意:查看日志时,您可以找到引发异常的行号。检查该行中使用的变量并挖掘更多。