如何解决NoMethodError与nil对象有关
| 您好,抱歉,如果这是一个愚蠢的问题,真的,我是ROR世界中的新手,并且我正在尝试学习。 我正在阅读带有Rails eBook的《敏捷Web开发》,并按照书本程序获得此错误的信息: 订单项中的NoMethodError 当您没有想到时,您有一个零对象! 您可能期望使用Array的实例。 评估为零时发生错误。 这是购物车模型class Cart < ActiveRecord::Base
has_many :line_items,:dependent => :destroy
def add_product(product_id)
current_item = line_items.where(:product_id => product_id).first
if current_item
current_item.quantity += 1
else
current_item = LineItem.new(:product_id => product_id)
line_items << current_item
end
current_item
end
end
这是订单项控制器,该方法正在被调用
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.cart,:status => :created,:location => @line_item }
else
format.html { render :action => \"new\" }
format.xml { render :xml => @line_item.errors,:status => :unprocessable_entity }
end
end
end
Rails版本3.0.5
Ruby 1.8.7版
有什么建议吗?你看错了吗?
谢谢
解决方法
当它在nil对象上报告NoMethodError时,表示您正在调用方法的对象不存在。在这里,
@cart
或@line_item
可能没有数据,这取决于发生错误的行号。所以可能是
@cart = current_cart
...要么...
@line_item = @cart.add_product(product.id)
没有返回有效的对象。查看这些方法。
,问题是您要在其上调用方法的对象为nil。错误消息上应该有一个行号,该行号应指向引起问题的有问题的代码行。
只是一个猜测,但是current_cart可以返回nil吗?那将是我最初的预感,但是如果您可以突出显示错误的原因是哪一行,那将很有帮助。
,NoMethodError
表示您正在调用的方法并未为您要调用的方法的类的实例定义,在这种情况下,您要为其调用方法的对象的类为NilClass
。如果不确定哪个对象为零,则总是可以用obj.class
来询问irb,正如另一个回答者所说,它应该告诉您哪一行包含错误(如果不是确切的语法)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。