2013-01-10 6 views
0

, 즉 사용자 후 쇼핑 카트에 무언가를 추가하고 레일이 세션의 복구하고, 사용자가 가 지금은 ... 더 쇼핑을 재개 한 후 브라우저 (가까이) 떠나 내가 할 수있는 방법 등브라우저를 닫은 후 세션을 활성 상태로 유지하십시오.

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    before_filter :current_cart 
    private 
    def current_cart 
     Cart.find(session[:cart_id]) 
     @cart = Cart.find(session[:cart_id]) 
     rescue ActiveRecord::RecordNotFound 
     cart = Cart.create 
     session[:cart_id] = cart.id 
     cart 
    end 


end 

그리고 주문 후 파괴 :

def destroy 
    @cart = current_cart 
    @cart.destroy 
    session[:cart_id] = nil 
    respond_to do |format| 
     format.html { redirect_to session[:prev_url], 
     :notice => I18n.t(:empty_card) } 
     format.json { head :ok } 
    end 
    end 

하지만이 세션을 계속 유지하려면 RoR에게 어떻게 알릴 수 있습니까?

+1

세션 쿠키를 보존해야하지만 일반적으로 그렇게하는 것은 좋지 않습니다. 쿠키 기반 기술을 대신 사용하십시오. –

+0

@ semir.babajic 예를 들어 세션 [: cart_id] = cart.id를 쿠키 [: cart_id] = cart.id로 변경하면 이전과 같이 대부분의 기능을 사용할 수 있습니까? 어떻게하면 카트를 복원 할 수 있습니까? – brabertaser19

+0

카트에 대한 사본을 데이터베이스에 보관하고 사용자를 참조하십시오. – MiniRagnarok

답변

2

세션 대신 쿠키로 cart_id을 저장하기 만하면 원하는 것을 얻을 수 있습니다. 장바구니 정보를 꺼내야 할 때 쿠키의 ID를 사용하십시오.

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    before_filter :current_cart 
    private 
    def current_cart 
     Cart.find(cookies[:cart_id]) 
     @cart = Cart.find(cookies[:cart_id]) 
     rescue ActiveRecord::RecordNotFound 
     cart = Cart.create 
     cookies[:cart_id] = cart.id 
     cart 
    end 


end 

희망이 있습니다.

+0

나는 지금 세션에서 쿠키를 사용하지만, 그렇습니까? – brabertaser19

+0

정확합니다. 적절한 쿠키 지속 기간을 설정하는 것을 명심하십시오. 쿠키 지속 시간을 영원히 또는 너무 짧게 유지하고 싶지는 않습니다. –

+0

쿠키 [: ..... 또는 쿠키 [: ... 맞습니까? 또한 어디에 내가 appcontroller에서 기간을 작성해야합니까? – brabertaser19

관련 문제