2013-10-02 50 views
3

我有Rails(4.0)使用User模型运行Devise gem(3.1.0)。我有一个名为CollectionsController的控制器,我想在本控制器中使用Devise的访问器方法current_user获取当前登录的用户对象。在rails控制器中访问设计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方法的来源是由设计我定义的,不是。所以我不认为这是问题。

+0

请CollectionsController以及与CURRENT_USER方法 – Raghu

+0

任何代码分享下你的代码被放置在行动或只是在像控制器的中间代码? – theIV

+0

是啊,对不起,它被放置在'索引'行动 –

回答

11

current_user是一种方便的方法,由Devise提供给ApplicationController。你的控制器应从它继承:

class CollectionsController < ApplicationController 

看来你可能会混为一谈ActiveRecord::Base(不同型号的子类)与ActionController(由控制器子类)。根据Rails docs

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

+0

请参阅[lib/devise/controllers/helpers.rb](https://github.com/plataformatec/devise/blob/4681f81ce6b643cd55d7404500ee02ab18bab5df/lib/devise/controllers/helpers.rb)@ github回购更多信息 –

1

我遇到了同样的问题。一些控制器可以访问current_user,而其他控制器则不能。在一个案例中,这是一个erb文件,该文件访问current_user,但仅在询问user_signed_in?后,我在控制器代码中添加了该检查,瞧! current_user已推出。

相关问题