Ruby on rails 更新购物车中的金额
我有一种检查优惠券是否有效的方法。我想在优惠券有效时更新当前购物车中的总金额。目前,我在CouponsController中遇到此错误Ruby on rails 更新购物车中的金额,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我有一种检查优惠券是否有效的方法。我想在优惠券有效时更新当前购物车中的总金额。目前,我在CouponsController中遇到此错误NoMethodError#将未定义的方法金额兑换为nil:NilClass 有什么想法可能是错误的吗 U控制器.rb 更新4 def redeem @coupon = Coupon.find_by_discount_code(params[:discount_code]) if @coupon.blank? redirect_to :b
NoMethodError#将未定义的方法金额兑换为nil:NilClass
有什么想法可能是错误的吗
U控制器.rb
更新4
def redeem
@coupon = Coupon.find_by_discount_code(params[:discount_code])
if @coupon.blank?
redirect_to :back
flash[:notice] = "Coupon is Invalid!"
else
@current_cart = Cart.find(current_cart.id)
@current_cart.amount = current_cart.amount - @coupon.amount
current_cart.save
redirect_to :back
flash[:notice] = "Coupon is Valid!"
end
end
更新1
application_controller.rb
def current_cart
Cart.find(session[:cart_id])
rescue ActiveRecord::RecordNotFound
cart = Cart.create
session[:cart_id] = cart.id
cart
end
helper_method :current_cart
end
更新3
class Cart < ApplicationRecord
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
else
current_item = line_items.build(product_id: product_id)
end
current_item
end
def total_price
line_items.to_a.sum { |item| item.total_price }
end
def tax_rate
tax_amount = 0
line_items.each do |item|
tax_amount += (item.product.price * item.quantity) * item.product.tax_rate.rate
end
tax_amount
end
def amount
line_items.to_a.sum { |item| item.total_price } + tax_rate + fee
end
def fee
shipment_amount = 0
line_items.each do |item|
if item.quantity <= 1
shipment_amount = item.product.shipment.fee
else
shipment_amount = item.product.multiple_shipment.fee
end
end
shipment_amount
end
end
class购物车 如果item.quantity使用空白?
方法,如:
def redeem
@coupon = Coupon.find_by_discount_code(params[:discount_code])
if @coupon.blank?
redirect_to :back
flash[:notice] = "Coupon is Invalid!"
else
current_cart.amount = current_cart.amount - @coupon.amount
redirect_to :back
flash[:notice] = "Coupon is Valid!"
end
end
试试这个
def redeem
@coupon = Coupon.find_by_discount_code(params[:discount_code])
if @coupon.blank?
redirect_to :back
flash[:notice] = "Coupon is Invalid!"
else
@current_cart = Cart.find(current_cart.id)
@current_cart.amount = @current_cart.amount - @coupon.amount
@current_cart.save
redirect_to :back
flash[:notice] = "Coupon is Valid!"
end
end
感谢您的快速回复@Uday kumar das!!现在我得到了未定义的方法amount=for#你的意思是?金额
可以在此处粘贴当前购物车的值。如果答案正确,请接受答案。@current\u cart=current\u cart。我添加了这个,错误消失了,但是金额没有更新。有什么想法吗?可能new\u amount=current\u cart.amount-@coupon.amount
然后current\u cart.update(amount:new\u amount)
我在carts表中添加了一个amount列并更新了4个作品。但仍然没有更新cart/show.html.erb上的金额。有什么想法吗?当前购物车
或@优惠券
为零。由于您已为@优惠券
进行了检查,因此当前的购物车
很可能为零。检查您是否设置正确。感谢@Sajin!!我知道这听起来很傻,但我是个新手。。。如果当前\u cart为零,我如何更改它?请共享设置当前\u cart的代码。请查看更新1@current_cart=当前购物车。我添加了这个,错误消失了,但是金额没有更新。有什么想法吗?undefined method amount=for#你是说?amount
你能分享你的cart.rb和carts表的字段吗谢谢你的帮助和时间@Sajin,请检查update 3amount是一个模型方法,而不是表中的字段。所以你不能更新,有没有一种方法我可以改变事情,让它工作?
def redeem
@coupon = Coupon.find_by_discount_code(params[:discount_code])
if @coupon.blank?
redirect_to :back
flash[:notice] = "Coupon is Invalid!"
else
@current_cart = Cart.find(current_cart.id)
@current_cart.amount = @current_cart.amount - @coupon.amount
@current_cart.save
redirect_to :back
flash[:notice] = "Coupon is Valid!"
end
end