Как обрабатывать активные записи найти параметры [: ID] в контроллере? - PullRequest
1 голос
/ 04 марта 2011

Мне интересно, как лучше всего справляться с такой ситуацией в ruby ​​на рельсах.

users_controller.rb

def show
  @user = User.find params[:id]
end

Если пользователь не найден, он генерирует исключение, которое нигде не перехватывается, поэтому он отображает некоторые уродливые вещи для конечного пользователя.

Решение было бы упаковать его в начало ... спасение ... конец блока:

def show
  begin
    @user = User.find params[:id]
  rescue
    flash[:error] = "User not found"
    redirect :action => :index
  end
end

хотя я никогда не видел такого кода ни в одной статье или учебнике по rails.

Как правильно обращаться с такими ситуациями?

Ответы [ 5 ]

3 голосов
/ 04 марта 2011

См. Документы rescue_from

2 голосов
/ 04 марта 2011

Это зависит от ваших требований.Но вам нужно общее решение, тогда у вас может быть спасательный блок в ApplicaionController, который обработает исключение RecordNotFound.

1 голос
/ 05 марта 2011

Среда разработки покажет вам ужасные сообщения об ошибках, но производственная среда просто выдаст ошибку HTTP 404 (страница не найдена), когда идентификатор недействителен.

1 голос
/ 04 марта 2011

Вы можете сделать

def show
  @user = User.find_by_id(params[:id])
  unless @user
    flash[:error] = "User not found"
    redirect :action => :index
  end
end

Но вы не можете ожидать, что будете вызывать ссылку с идентификатором, которого нет в БД из приложения. Пожалуйста, смотрите ответ на вопрос

0 голосов
/ 15 сентября 2016

Я думаю, что вы можете это исправить с помощью @user = User.find(params[:id] = current_user)

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