此代码中是否有任何错误?
if current_user.cart
existing_product = current_user.cart.products.find_by(id:@product.id)
if existing_product
subq = SubQuantity.where(product_id: @product.id, cart_id: current_user.cart.id)
sub_quant = params[:quant]
subq.first.sub_quantity = subq.first.sub_quantity + sub_quant.to_i
else
current_user.cart.products << @product
subq = SubQuantity.create
sub_quant = params[:quant]
subq.sub_quantity = sub_quant
subq.product = @product
subq.cart = current_user.cart
end
else
@cart = Cart.create
@sub_quantity = SubQuantity.create
sub_quant = params[:quant]
@sub_quantity.sub_quantity = sub_quant
@product.sub_quantities << @sub_quantity
@cart.sub_quantities << @sub_quantity
@cart.products << @product
@cart.user = current_user
@cart.save
@sub_quantity.save
end
redirect_to root_path
我要做的是,检查current_user的购物车是否有任何带有id = @ product.id的产品,然后增加其数量,否则在购物车中添加产品。我的代码无效..我收到此错误了undefined method sub_quantity for nil:NilClass
在这一行,
subq.first.sub_quantity = subq.first.sub_quantity + sub_quant.to_i
答案 0 :(得分:1)
如果这个
subq.first.sub_quantity = subq.first.sub_quantity + sub_quant.to_i
产生
undefined method sub_quantity for nil:NilClass
这只是意味着subq.first
返回零。 nil
没有sub_quantity
方法,您尝试对其进行调用,因此您会收到该错误。
subq
定义为:
subq = SubQuantity.where(product_id: @product.id, cart_id: current_user.cart.id)
因此,这意味着没有与您的查询匹配的SubQuantity对象(即数据库中的行)。如果您的ActiveRecord查询未返回任何结果,则在其上调用first
将返回nil
。因此,不存在product_id
@product.id
和cart_id
current_user.cart.id
的子数量。
为什么会这样,是否应该,或者你的代码应该如何响应这种情况 - 取决于你的应用程序中发生了什么,我不能说。
答案 1 :(得分:0)
试试这个:
if existing_product
//find sub_quantity associated with that product.
subq = SubQuantity.where(product_id: @product.id, cart_id: current_user.cart.id).first
if subq
subq.sub_quantity = subq.first.sub_quantity + params[:quant].to_i
subq.save
end
else
current_user.cart.products << @product
// Create a SubQuantity with all attributtes
SubQuantity.create(sub_quantity: params[:quant], product: @product, cart: current_user.cart)
end