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

我使用模型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定义的,而不是我。 所以我认为这不是问题所在。

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

 class CollectionsController < ApplicationController 

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

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

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

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

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