Rails更新产品数量

时间:2016-06-01 17:07:27

标签: ruby-on-rails ruby ruby-on-rails-4 callback checkout

我使用paypal标准支付跟随Ryan Bates的截屏视频,我现在基本上必须从Cart模型发送结账信息。 在交易完成后我试图更新产品数量时有点困惑。

我尝试使用回调但无济于事。任何帮助将不胜感激

我最接近的是使用此更新数量回调但由于某种原因,它正在更新错误的购物车。不确定它是否在检查购物车出错时选择了错误的订单项或

 class PaymentNotification < ActiveRecord::Base
   belongs_to :cart
   serialize :params
   after_create :mark_cart_as_purchased, :update_quantity


private

def mark_cart_as_purchased
  if status == "Completed"
    cart.update_attribute(:purchased_at, Time.now)
  end
end

def update_quantity
  @line_item = LineItem.find(params[:id])
  @line_item.upd
end
end

订单项类

class LineItem < ActiveRecord::Base
  belongs_to :order
  belongs_to :product
  belongs_to :cart
  belongs_to :stock
  after_create :stock_stat 


   def total_price
     product.price * quantity
   end

   def upd
     if cart.purchased_at
       product.decrement!(quantity: params[:quantity])
      end
    end

 end

1 个答案:

答案 0 :(得分:0)

params散列仅在控制器中可用。您无法在模型中访问它。您必须将params [:quantity]作为方法参数传递给upd方法:

def update_quantity
  @line_item = LineItem.find(params[:id])
  @line_item.upd(params[:quantity])
end

def upd(quantity)
  if cart.purchased_at
    product.decrement!(quantity: quantity)
  end
end

此外,您应该考虑使用Time.current而不是Time.now来计算应用程序在application.rb中配置的时区,除非您只想使用本地的任何时间。