2011-12-15 3 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 예외를 처리하고, 전무 돌아보십시오 :

before_filter :require_user 

def require_user 
    redirect_to login_path unless current_user 
end 

기억

def current_user 
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    rescue ActiveRecord::RecordNotFound 
end 

리디렉션을, 당신은 사용자를 확인하고 로그인 경로로 리디렉션 처리하는 두 번째 before_filter을 추가해야합니다 인증을 관리하는 컨트롤러에 skip_before_filter :require_login을 추가하여 로그인 작업에 대해 require_user을 생략하십시오.

+0

도움이 필요합니다. 오래된 데이터는 이전의 혼란에서 비롯된 것 같습니다. 마이그레이션을 여러 번 다시 설정했습니다. –

관련 문제