使用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`.
当我提交空表单然后查看购物车时,所有订单项仍然存在。这怎么可能?我错过了什么?
答案 0 :(得分:1)
只有在保存订单时才会销毁购物车。所以我想它永远不会丢失物品。当您创建订单时,它可能会破坏当前购物车并创建一个新购物车。