в моих контроллеров я использую что-то вроде этого много, чтобы убедиться, что project
действительно принадлежит данный user
:Каков наилучший способ обработки ошибок ID в Ruby on Rails?
private
def authorized_user
@project = Project.find(params[:id])
redirect_to root_path unless current_user?(@project.user)
end
Это прекрасно работает, потому что пользователь А не может видеть проекты пользователя B (он перенаправляется на корневая страница).
Однако это работает только до тех пор, пока запрашиваются URL-адреса project
, которые действительно существуют.
Например, URL http://localhost:3000/projects/1
либо отобразит проект пользователя, либо перенаправляет его на корневой URL (если другой пользователь пытается получить доступ к проекту).
Но когда я пытаюсь получить доступ к проекту, который не существует вообще в базе данных, например. как это:
http://localhost:3000/projects/777
... Я получаю некрасивый ActiveRecord::RecordNotFound
ошибку:
Couldn't find Person with id=777
Что бы лучший способ улучшить пользовательский опыт здесь?
У меня никогда не было развернуто Проект Rails еще нет, поэтому я даже не знаю, как эта ошибка будет выглядеть в режиме производства.
Может ли кто-нибудь помочь?
Благодаря ...
ОК, спасибо! Что именно делает «первый» в этом случае? Я думал, что «первый» выбирает первую запись ... Но я n00b ... – Tintin81
Ну, чтобы исправить вашу нуобильность, прочтите это руководство: [Интерфейс запросов] (http://guides.rubyonrails.org/active_record_querying. HTML). Вы найдете ответ. :) –
Хорошо, я понимаю. Он возвращает 'nil', а не исключает исключение. Но я должен проверить значения nil в следующей строке, тогда ... – Tintin81