2011-10-06 52 views
0

我使用devise進行身份驗證。在我的用戶模型中,有一個「locale」字段,我想在當前登錄用戶的應用程序控制器中使用該字段。所以我在應用程序控制器中有:在應用程序控制器中使用current_user

@user = User.current_user.locale 

但是這不起作用。如何訪問應用程序控制器中當前用戶的字段?並且devise還沒有創建用戶控制器,我在哪裏可以找到當我想在那裏做一些更改?謝謝!

回答

2

current_user已經是User對象,只需調用區域就可以了:

@user = current_user 
locale = current_user.locale 
0

current_user是一個實例方法,這意味着你只能把它(或內)的實例User。當您執行User.current_user時,您試圖將其稱爲類方法,即用戶本身的方法。

如果你真的需要使用current_userApplicationController --at最好的一個代碼味道,並在最壞的一個非常糟糕的主意 - 你可以依傍Warden,其設計是建立在之上。例如:

user = env['warden'].current_user 
user.locale 

至於你關於控制器的其他問題,it has been answered before

+0

無法運作的:未定義的方法'CURRENT_USER」爲#<監獄長這是我有:用戶= ENV [‘看守’] CURRENT_USER 的I18n .locale = user.locale – John

+0

啊,在我可能錯誤之前沒有直接與Warden合作過,或者無論如何都無法解決這個問題。你能否備份並向我們展示你想放在ApplicationController中的代碼,並告訴我們爲什麼它最適合在那裏,而不是在另一個控制器中? –

+0

#Jordan,我想你是錯的,Devise將current_user設置爲ApplicationController的助手(返回一個實例變量),允許直接在控制器和視圖中訪問它。它與warden無關(即使它是使用warden env構建的)。 – Elmatou

0

current_user在應用程序控制器中照常使用。 訪問它在每一個請求(在應用程序控制器):

before_filter :get_locale 

def get_locale 
    @user = current_user 
    locale = @user.locale 
end 
相關問題