我有一个current_user
方法来处理身份验证。
application_controller.rb
protect_from_forgery
helper_method :current_user
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
但是当我尝试访问某个页面时,我收到以下错误:
Couldn't find User with id=1
app/controllers/application_controller.rb:10:in `current_user'
如何传递@current_user
某种默认值,如果没有用户,则会重定向到登录页面。
感谢您的帮助。
答案 0 :(得分:12)
您的会话看起来像包含旧数据,特别是不再存在的用户的id(1)。尝试处理ActiveRecord引发的RecordNotFound
异常,并返回nil:
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
rescue ActiveRecord::RecordNotFound
end
要重定向,您应该添加第二个before_filter
,用于检查用户并处理重定向到登录路径:
before_filter :require_user
def require_user
redirect_to login_path unless current_user
end
请记住通过将require_user
添加到管理您的身份验证的控制器来省略skip_before_filter :require_login
的登录操作。