1

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`.

空のフォームを送信してからカートを表示すると、すべての項目がまだそこにあります。これはどのように可能ですか?私は何を逃したのですか?

4

1 に答える 1

1

カートは、注文が保存されたときにのみ破棄されます。だから私はそれがアイテムを失うことは決してないと思います。注文を作成すると、おそらく現在のカートが破棄され、新しいカートが作成されます。

于 2013-03-30T22:45:57.953 に答える