在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
可用。
- 具有设计路径的用户和管理员之间的唯一ID
- 调用Rails.application.routes.generate()或Rails.application.routes.recognize_path()时出现’RuntimeError:route set not finalized’
- 在ApplicationController中覆盖current_user会引发未定义的方法错误
- Rails turbolinks长请求不显示页面加载
- warden回调应该放在rails应用程序中的哪个位置?
- Carrierwave默认图像不显示
- 登录或注册后设计重定向回原始位置?
- Rails基于自定义REST方法生成的辅助路径失败
- Rails延迟工作和图书馆课程