0

购买完成后,我需要一种方法将商店中的产品状态更改为已售出...

我使用以下代码:

if @order.purchase      #I use active merchant's purchase method on compiled order
  update_product_status #method explained below
end

在将产品复制为 line_item 之前,运行此代码:

@product = Product.find(params[:product_id]) #line_item belongs to product and cart
session[:pending_purchase] = @product.id     #stores ID number into session 

以便稍后我可以提取 ID,用于 update_product_status 代码:

def update_product_status              #used to update boolean 'sold' status on product
  product = session[:pending_purchase]
  @sold_product = Product.find(product)
  @sold_product.update(:sold = true)   #not sure if this syntax is correct
end

如果有人购买两件商品,可能会出现问题。如果创建第二个 line_item 并将其添加到购物车中, :pending_purchase 中的 ID 会被覆盖吗?我将如何访问这两个变量并确保这两个项目现在都具有“sold = true”属性?

4

1 回答 1

1

最简单的方法是将产品的 id 存储为数组。

@product = Product.find(params[:product_id])
(session[:pending_purchase] ||= []) && (session[:pending_purchase] << @product.id )

当您使用它时,您会发现更多产品:

   @products = Product.find(session[:pending_purchase])
   @products.each do |p|
     .........
   end
于 2013-08-16T06:30:43.210 回答