在Rails中添加和访问多个会话变量

时间:2013-08-16 05:47:09

标签: ruby-on-rails ruby session product

我需要一种方法来改变商店中产品的状态,以便在购买完成后再出售......

我使用以下代码:

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并将其添加到购物车,那么ID:pending_purchase中的ID是否会被覆盖?我如何访问这两个变量并确保这两个项目现在都有'sold = true'属性?

1 个答案:

答案 0 :(得分: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