我使用devise進行身份驗證。在我的用戶模型中,有一個「locale」字段,我想在當前登錄用戶的應用程序控制器中使用該字段。所以我在應用程序控制器中有:在應用程序控制器中使用current_user
@user = User.current_user.locale
但是這不起作用。如何訪問應用程序控制器中當前用戶的字段?並且devise還沒有創建用戶控制器,我在哪裏可以找到當我想在那裏做一些更改?謝謝!
我使用devise進行身份驗證。在我的用戶模型中,有一個「locale」字段,我想在當前登錄用戶的應用程序控制器中使用該字段。所以我在應用程序控制器中有:在應用程序控制器中使用current_user
@user = User.current_user.locale
但是這不起作用。如何訪問應用程序控制器中當前用戶的字段?並且devise還沒有創建用戶控制器,我在哪裏可以找到當我想在那裏做一些更改?謝謝!
current_user
已經是User對象,只需調用區域就可以了:
@user = current_user
locale = current_user.locale
current_user
是一個實例方法,這意味着你只能把它(或內)的實例User
類。當您執行User.current_user
時,您試圖將其稱爲類方法,即用戶類本身的方法。
如果你真的需要使用current_user
內ApplicationController
--at最好的一個代碼味道,並在最壞的一個非常糟糕的主意 - 你可以依傍Warden,其設計是建立在之上。例如:
user = env['warden'].current_user
user.locale
至於你關於控制器的其他問題,it has been answered before。
current_user在應用程序控制器中照常使用。 訪問它在每一個請求(在應用程序控制器):
before_filter :get_locale
def get_locale
@user = current_user
locale = @user.locale
end
無法運作的:未定義的方法'CURRENT_USER」爲#<監獄長這是我有:用戶= ENV [‘看守’] CURRENT_USER 的I18n .locale = user.locale – John
啊,在我可能錯誤之前沒有直接與Warden合作過,或者無論如何都無法解決這個問題。你能否備份並向我們展示你想放在ApplicationController中的代碼,並告訴我們爲什麼它最適合在那裏,而不是在另一個控制器中? –
#Jordan,我想你是錯的,Devise將current_user設置爲ApplicationController的助手(返回一個實例變量),允許直接在控制器和視圖中訪問它。它與warden無關(即使它是使用warden env構建的)。 – Elmatou