在应用程序控制器中使用current_user

时间:2011-10-06 08:12:50

标签: ruby-on-rails devise

我使用设计进行身份验证。在我的用户模型中有一个字段“locale”,我想在当前登录用户的应用程序控制器中使用它。所以我在应用程序控制器中有这个:

    @user = User.current_user.locale

但这不起作用。如何在应用程序控制器中访问当前用户的字段?并且设计没有创建用户控制器,在哪里可以找到当我想在那里进行一些更改时?谢谢!

4 个答案:

答案 0 :(得分:2)

current_user已经是User对象,只需在其上调用locale:

@user = current_user
locale = current_user.locale

答案 1 :(得分:0)

current_user是一种实例方法,这意味着您只能在User类的实例上(或内)调用它。当你执行User.current_user时,你试图将其称为类方法,即用户本身的方法。

如果真的需要在current_user中使用ApplicationController - 充其量是代码味道,最糟糕的是一个非常糟糕的主意 - 你可以依赖user = env['warden'].current_user user.locale 3}},其中Devise建立在。 E.g:

{{1}}

关于控制器的其他问题,Warden

答案 2 :(得分:0)

current_user在应用程序控制器中照常使用。 在每个请求中(在您的应用程序控制器中)访问它:

before_filter :get_locale

def get_locale
  @user = current_user
  locale = @user.locale
end

答案 3 :(得分:0)

current_userapplication_controller中不可用,因为它扩展了base。 简单的解决方案是像这样使用它

before_action :user_full_name

def user_full_name
 @user_full_name = current_user.fname + ' ' + current_user.lname
end