Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 更新购物车中的金额_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 更新购物车中的金额

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

我有一种检查优惠券是否有效的方法。我想在优惠券有效时更新当前购物车中的总金额。目前,我在CouponsController中遇到此错误
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