#ruby-on-rails #ruby
#ruby-on-rails #ruby
Вопрос:
Можно ли использовать функцию как get_by_id_ или_404 на rails. Например, в моем контроллере я использую :
@destination = Destination.find_by_id(params[:id])
если идентификатор не задан или адресат не найден, как я могу попросить Rails перенаправить на страницу 404?
Спасибо!
Ответ №1:
В рабочем режиме Rails автоматически восстанавливает ActiveRecord::RecordNotFound
исключение, отображая страницу ошибки 404.
Просто используйте обычную версию finder, которая появляется ActiveRecord::RecordNotFound
, когда результат не найден.
@destination = Destination.find_by_id!(params[:id])
Однако в вашем случае нет причин использовать этот find_by
метод. Просто отступите find
назад .
@destination = Destination.find(params[:id])
Ответ №2:
Это из руководства:
Вы можете указать восклицательный знак (!) в конце динамических средств поиска, чтобы они вызывали ошибку ActiveRecord::RecordNotFound, если они не возвращают никаких записей, например Client.find_by_name!(«Райан»)
Когда это произойдет, Rails отобразит для вас страницу 404. Кроме того, просто используйте find
в качестве ярлыка для find_by_id
:
@destination = Destination.find!(params[:id])
Комментарии:
1. Восклицательный знак не нужен! Проверьте документы
find
, он вызовет RecordNotFound, если вы передадите ему идентификатор.2. Я думаю, вы имели в виду, что find — это ярлык для find_by_id!
Ответ №3:
Я думаю, что в процессе производства это вызовет ошибку и отобразит 404 или 500.
Комментарии:
1. Если вы не измените метод finder, этот метод не будет генерировать никаких исключений.