まず、カートをセッションに保存します。カートには品目 (製品) が含まれています。チェックアウト ボタンは、cart_id が新しい注文に渡された Order.new フォームにつながります (cart has_one order、order belongs_to cart)。
うまくいけば、これまでのところとても良いです。
カートのパラメーターには、ユーザーがチェックアウト ボタンを押すまで、最初は nil である order_id が含まれます。注文が作成されたとき、カートの order_id はまだ nil です。注文モデルで after_create を使用して、有効な order_id を持つようにカートを更新するにはどうすればよいですか?
アプリケーションコントローラーに current_cart メソッドがあるため、すべてのコントローラーで current_cart にアクセスできますが、モデルではアクセスできません->セッションに保存されているため、不要だと聞いていますとにかくモデル内のセッションにアクセスします。
これをどのように行うことをお勧めしますか?
私の説明が明確でない場合に備えて、いくつかのコードを示します。
orders_controller.rb
def create
@cart = current_cart
@order = @cart.build_order(order_params)
if @order.save
redirect_to @order, notice: "The order has been successfully created. Below are your shipping options."
else
render action: "new"
end
end
レールコンソール
>> @order.cart.order_id
=> nil
それは本当に重要ですか?たぶん私は偏執的ですが、注文からのcart_idだけでなく、カートからのorder_idにもアクセスできるようにすることをお勧めします。
ありがとう、パット