2012-01-12 65 views
0

我正在使用Devise處理購物應用程序中的用戶。我想要做的是每次用戶登錄時創建一個新的購物車(理想情況下,每次用戶註銷時都銷燬同一個購物車,但我會堅持這個問題的第一部分)。如何讓應用程序控制器知道用戶已登錄(用戶使用設計進行處理)

到目前爲止,我看這個問題:Devise call backs

我想出了這一點:

class ApplicationController < ActionController::Base 
    helper :all 
    protect_from_forgery 

    before_filter :fetch_categories 

    . 
    . 
    . 

    Warden::Manager.after_authentication do 
    session[:cart_id] ||= Cart.create!.id 
    end 
end 

......但顯然這是不正確的,因爲我得到這個錯誤:

NameError in Devise::SessionsController#create 

undefined local variable or method `session' for ApplicationController:Class 

有一些其他的方式,我可以告訴應用程序控制器來響應用戶登錄,或者我應該在其他地方把這個代碼(除應用控制器)?謝謝你的幫助。

回答

2

the docs掃視了一眼,它看起來像你可以做這樣的事情:

Warden::Manager.after_authentication do |user, auth, opts| 
    auth.session[:cart_id] ||= Cart.create!.id 
end 
+0

這似乎已經奏效整個應用

檢查!在我將其標記爲答案之前,有一件事情:你有什麼想法,爲什麼你必須調用auth.session而不是僅僅是會話? – varatis 2012-01-12 09:15:54

+0

因爲'ApplicationController'沒有名爲'session'的類方法。 'session'是一個實例方法(並且在你的代碼中你在類上下文中調用它)。我的代碼的工作原理是因爲'after_authentication'將身份驗證代理對象作爲第二個參數(我稱之爲'auth')傳遞給該塊,並且該對象具有'session'方法,該方法返回經過身份驗證的用戶的會話數據。 – 2012-01-12 09:18:42

-1

Simpally寫一個過濾器之前

application controller

before_filter :set_current_user

def set_current_user Authorization.current_user = current_user end

您可以使用

` if !current_user.nil? 

    end` 
相關問題