2013-01-10 110 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

您需要保留會話cookie,但這通常不是一個好主意。改爲使用基於cookies的技術。 –

+0

@ semir.babajic我會像以前一樣擁有大部分功能,如果我將會話[:cart_id] = cart.id更改爲cookie [:cart_id] = cart.id?那我怎麼能恢復我的購物車? – brabertaser19

+0

在您的數據庫中保存購物車的副本並提供給用戶。 – MiniRagnarok

回答

2

只需將cart_id存儲到cookie中而不是會話中,就可以實現您想要的功能。當您需要提取購物車信息時,請使用Cookie中的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

因爲我現在用會話,但與cookie,對嗎? – brabertaser19

+0

正是。請記住設置適當的Cookie時間,您不希望它永遠持續下去,也不要太短。 –

+0

cookie [:.....或cookies [:...是對的?另外我需要在appcontroller中寫入持續時間? – brabertaser19

相關問題