在rails控制器中访问devise current_user变量

时间:2013-10-02 22:16:03

标签: ruby-on-rails devise

我已经使用模型User运行Devise gem(3.1.0)的Rails(4.0)。我有一个名为CollectionsController的控制器,我想在此控制器中使用Devise的访问器方法current_user获取当前登录的用户对象。

然后返回undefined local variable or method 'current_user' for CollectionsController:Class。最有趣的是,当我试图在另一个控制器中做同样的事情时,例如PagesController - 一切都很完美!
UPD:分享我的控制器的“代码”:)

class CollectionsController < ActionController::Base
    def index
         @user = current_user
    end
end

current_user方法的来源由Devise定义,而不是我。所以我认为这不是问题所在。

4 个答案:

答案 0 :(得分:12)

current_user是Devise提供给ApplicationController的便捷方法。你的控制器应该继承它:

class CollectionsController < ApplicationController

看起来你可能会将ActiveRecord::Base(由模型子类化)与ActionController(由控制器子类化)混为一谈。根据{{​​3}}:

  

默认情况下,只有Rails应用程序中的ApplicationController继承自ActionController :: Base。所有其他控制器依次从ApplicationController继承。

答案 1 :(得分:3)

before_action :authenticate_user! 添加到您的控制器。

请参阅: https://github.com/plataformatec/devise#controller-filters-and-helpers

答案 2 :(得分:1)

我遇到了同样的问题。有些控制器可以访问current_user而其他控制器则无法访问。在一个案例中,它是一个访问erb的{​​{1}}文件,但只有在询问current_user之后我才在我的控制器代码中添加了该检查并瞧! user_signed_in?可用。

答案 3 :(得分:0)

class CollectionsController < ApplicationController
    include Devise::Controllers::Helpers 
    def index
         @user = current_user
    end
end

在控制器中添加(包括Devise :: Controllers :: Helpers),如上所示。