Ruby on rails Rails错误:未定义nil:NilClass的方法“%1”

Ruby on rails Rails错误:未定义nil:NilClass的方法“%1”,ruby-on-rails,methods,undefined,cart,nomethoderror,Ruby On Rails,Methods,Undefined,Cart,Nomethoderror,所以,因为我对rails和ruby还比较陌生,所以我仍在努力理解这里的问题出在哪里。我在一家网店的购物车上工作。用户将获得一个会话,在本例中,行_item.rb存储了他的购物车项目 问题: 当我单击一个项目时,它会通过cart方法add\u product添加到购物车中。如果再次单击同一项,而不是两次添加同一项,则只需将++1添加到该项的quantity属性中即可。但是,当我第二次点击它时,我会看到错误页面,上面写着: LineItemsControllercreate中的NoMethodErr

所以,因为我对rails和ruby还比较陌生,所以我仍在努力理解这里的问题出在哪里。我在一家网店的购物车上工作。用户将获得一个会话,在本例中,行_item.rb存储了他的购物车项目

问题: 当我单击一个项目时,它会通过cart方法add\u product添加到购物车中。如果再次单击同一项,而不是两次添加同一项,则只需将++1添加到该项的quantity属性中即可。但是,当我第二次点击它时,我会看到错误页面,上面写着:

LineItemsControllercreate中的NoMethodError

这是我的购物车。rb:

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

  def add_product(product_id)
    current_item = line_items.find_by_product_id(product_id)
    if current_item
      current_item.quantity += 1
      Rails.logger.debug(current_item.quantity)
    else
      current_item = line_items.build(:product_id => product_id)
    end
    current_item
  end
end
结束

有什么想法吗


干杯

我想这是因为当前商品没有任何数量。 可能没有默认值。你期望它是0,但实际上是零

我设置了一个默认值,并确保该列不能为零。此外,您还可以定义一个before_create方法,如果值为nil,则在保存之前将该值设置为0

解决此问题的另一种方法是确保没有零:

current_item.quantity = current_item.quantity.blank? ? 1 : current_item.quantity + 1

我想这是因为目前的商品没有任何数量。 可能没有默认值。你期望它是0,但实际上是零

我设置了一个默认值,并确保该列不能为零。此外,您还可以定义一个before_create方法,如果值为nil,则在保存之前将该值设置为0

解决此问题的另一种方法是确保没有零:

current_item.quantity = current_item.quantity.blank? ? 1 : current_item.quantity + 1

这表示当前_item.quantity为空。这可以是整数,但在数据库中存储为null。
如果出现这种情况,您可以在迁移中默认设置一个值,或者当您第一次创建时,您可以将数量值设置为1。

这表示当前的\u item.quantity为空。这可以是整数,但在数据库中存储为null。
如果出现这种情况,您可以在迁移中默认设置一个值,或者当您第一次创建时,您可以将数量值设置为1。

错误消息应该指示它在哪一行失败。由于LineItemsControllercreate中的错误消息是NoMethodError,我猜它必须在create方法中有一行,而不是在Cartadd_产品中,正如您所提到的。您的find_by_product_id方法定义在哪里?当前项目没有得到值。@PrakashMurthy好吧,这里是:app/models/cart.rb:7:in add\u product'app/controllers/line\u items\u controller.rb:45:in create'我盯着它看,但不明白是什么错了@我认为该方法是rails框架查找方法的一部分。有人能证实这一点吗?是的,我可以证实,在搞乱了我的一个项目后,这一点是存在的。很明显,我从来都不需要它。在控制器的第3行输入一条日志语句,并尝试打印产品。我遇到一个问题,params[:product_id]的语法不正确。如果是这种情况,请尝试类似params[][product_id]的方法。我很有信心就是这样。错误消息应该表明它在哪条线路上出现故障。由于LineItemsControllercreate中的错误消息是NoMethodError,我猜它必须在create方法中有一行,而不是在Cartadd_产品中,正如您所提到的。您的find_by_product_id方法定义在哪里?当前项目没有得到值。@PrakashMurthy好吧,这里是:app/models/cart.rb:7:in add\u product'app/controllers/line\u items\u controller.rb:45:in create'我盯着它看,但不明白是什么错了@我认为该方法是rails框架查找方法的一部分。有人能证实这一点吗?是的,我可以证实,在搞乱了我的一个项目后,这一点是存在的。很明显,我从来都不需要它。在控制器的第3行输入一条日志语句,并尝试打印产品。我遇到一个问题,params[:product_id]的语法不正确。如果是这种情况,请尝试类似params[][product_id]的方法。我很有信心就是这样。哇。。。是的,这就解决了。尽管如此,我当然应该确保默认值为1。谢谢你抽出时间。哇。。。是的,这就解决了。尽管如此,我当然应该确保默认值为1。谢谢你抽出时间。
current_item.quantity = current_item.quantity.blank? ? 1 : current_item.quantity + 1