먼저 카트를 세션에 저장했습니다. 카트에는 품목 (제품)이 들어 있습니다. 체크 아웃 버튼은 새로운 주문 (cart has_one order, 주문 own_to cart)에 cart_id가 전달 된 Order.new 폼으로 연결됩니다.after_create를 사용하여 카트의 order_id 업데이트
바라건대 지금까지 그렇게 좋았습니다.
장바구니 매개 변수에는 사용자가 결제 버튼을 누를 때까지 처음에는 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뿐만 아니라 cart_wid_id에 액세스하는 것이 좋습니다.
모두 감사합니다, 팻
세션 중에 장바구니를 보관하지 않는 것에 대한 독서 자료가 있습니까? 나는 그것을 이렇게하도록 권고 한 튜토리얼을 따랐다. – Peege151
아프지 않겠지 만 데이터베이스에이 정보를 저장하면 어떤 이점이 있다고 생각합니까? 물론 최종 주문을 데이터베이스에 저장할 수 있습니다. 하지만 카트? 그 유일한 목적은 실제 명령이 내려지면 쓸모 없게되는 궁극적 인 목표를 가진 "초안 주문"입니다. 장바구니가 본질적으로 세션의 존재에 묶여 있다는 사실과 함께, 나는 데이터베이스에 그것을 지속하는 것이 실제로 필요하지 않다고 생각합니다. 결국 그것은 내 개인적인 의견 일뿐입니다. 이점은 쿼리가 적고 쓸데없는 데이터가 적습니다 (주문이 일단 카트를 복제하면) –
주석이 너무 길어졌습니다. 또 다른 이점 : 지속성을 처리 할 필요가 없기 때문에 코드가 간단합니다. 아마 더 많은 이점을 생각할 수 있습니다 :-) 그러나, 당신이 튜토리얼을하고 있다면 당신은 그들이 말하는 것을 고집해야합니다. 기회는 튜토리얼 이이 모델을 구축 계속됩니다. –