2011-12-15 30 views
4

我有一个current_user方法来处理身份验证。找不到id = 1的用户

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一种默认值,所以如果没有用户,它将重定向到登录页面。

感谢您的帮助。

回答

12

它看起来像你的会话包含旧数据,特别是不再存在的用户的id(1)。尝试处理RecordNotFound例外通过ActiveRecord的提高,并返回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 

记住通过将skip_before_filter :require_login添加到哪个控制器管理您的身份验证来省略登录操作require_user

+0

Thans for helping.I guess that old data was from a migration mess I've reset reset migration multiple。 – 2011-12-15 21:41:33