Получить модель или 404 на Rails

#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, этот метод не будет генерировать никаких исключений.