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 

後で update_product_status コードの ID を取得できるようにします。

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

誰かが 2 つのアイテムを購入すると、問題が発生する可能性があります。2 番目の 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 に答える