1
敏捷星期三發展捕獲訂單章與Rails使用下面的代碼:倉庫的購物車如何保留其訂單項?
# 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`.
當我提交一個空的表單,然後查看車,所有的行項目仍然存在。這怎麼可能?我錯過了什麼?
我明白這一點。但關聯是'LineItem belongs_to:cart'。當我們遍歷行項目並將'cart_id'設置爲'nil'時,購物車被銷燬並沒有什麼區別--'line_item.cart_id'現在是'nil'。我懷疑這是在'@ order.save'返回'false'時Rails回滾事務,但我還沒有驗證這一點。仍在研究它。 – dee
Nop,實際上發生的是您更改了cart_id,但如果它無效,它不會保存到數據庫。所以它不會保存數據庫中的line_items。說得通? –
雖然我不保存訂單項。 'item.cart_id = nil' then'self.line_items << item',其中'self'是order的實例...所以line_item驗證甚至不起作用。這是我試圖保存的訂單失敗的原因,但在更改訂單項中的cart_id後。 – dee