我目前正在开发我的项目,而且我是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 %> × <%= 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
有人可以解释刚刚发生了什么吗?
答案 0 :(得分:1)
而不是current_item.quantity += 1
尝试current_item.quantity = current_item.quantity.to_i + 1
我所做的是,如果current_item.quantity
是nil
,current_item.quantity.to_i
将是= 0,否则它将获得current_item.quantity的整数值
答案 1 :(得分:0)
从给定的代码中,我怀疑只是在行current_item.quantity += 1
之后。我猜它有时候是零,这就是你得到例外的原因。
执行以下操作时,请确保将数量值初始化为1 ,
current_item = line_items.build(:product_id => product_id)
注意:查看日志时,您可以找到引发异常的行号。检查该行中使用的变量并挖掘更多。