Rails を使用した Agile Wed Development の Capturing an Order の章では、次のコードを使用しています。
# 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`.
空のフォームを送信してからカートを表示すると、すべての項目がまだそこにあります。これはどのように可能ですか?私は何を逃したのですか?