Не удалось найти пользователя с id = 1 - PullRequest
4 голосов
/ 16 декабря 2011

У меня есть 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 своего рода значение по умолчанию, поэтому, если нет пользователя, оно будет перенаправлено на страницу входа.

Спасибо за помощь.

1 Ответ

12 голосов
/ 16 декабря 2011

Похоже, что ваш сеанс содержит старые данные, в частности идентификатор (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

Не забудьте опустить require_user для действия входа в систему, добавив skip_before_filter :require_login к тому, какой контроллер управляет вашей аутентификацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...