Depot的购物车如何保留其订单项?

时间:2013-03-30 20:18:08

标签: ruby-on-rails ruby

使用Rails在Agile Wed Development中捕获一个订单章节使用以下代码:

# orders_controller.rb
def create
    @order = Order.new(params[:order])
    @order.add_line_items_from_cart(current_cart)
    if @order.save
      Cart.destroy(session[:cart_id])
      session[:cart_id] = nil
      redirect_to store_url
    else
      @cart = current_cart
      render 'new'
    end
end

  # order.rb
  def add_line_items_from_cart(cart)
    cart.line_items.each do |item|
      item.cart_id = nil
      line_items << item
    end
  end

如果出现验证错误,购物车如何保留其订单项?在我们知道订单是否有效之前,add_line_items_from_cart会运行。它将订单项与订单相关联,然后将item.cart_id设置为nil:

item.cart_id = nil
self.line_items << item # self is an instance of `Order`.

当我提交空表单然后查看购物车时,所有订单项仍然存在。这怎么可能?我错过了什么?

1 个答案:

答案 0 :(得分:1)

只有在保存订单时才会销毁购物车。所以我想它永远不会丢失物品。当您创建订单时,它可能会破坏当前购物车并创建一个新购物车。