Как вы выдаете ответ 404 от действия контроллера рельсов? - PullRequest
41 голосов
/ 23 апреля 2009

Какой предпочтительный способ выдачи ответа 404 от действия контроллера рельсов?

Ответы [ 7 ]

36 голосов
/ 23 апреля 2009

Это кажется хорошим ...

# Rails 2 and below
render :file => "#{RAILS_ROOT}/public/404.html",  :status => 404

# Rails 3 and up
render :file => "#{Rails.root}/public/404.html",  :status => 404
33 голосов
/ 01 февраля 2011

Вы также можете

raise ActiveRecord::RecordNotFound

исключение.

27 голосов
/ 23 мая 2013

Для меня был лучший способ:

raise ActionController::RoutingError.new('Not Found')

или просто

raise ActionController::RoutingError, 'Not Found'

Или есть другие решения: Как перенаправить на 404 в Rails?

6 голосов
/ 24 апреля 2009

В ApplicationController определите метод, например:

def render_404
  render :file => "#{RAILS_ROOT}/public/404.html",  :status => 404
end
6 голосов
/ 23 апреля 2009

Ссылка

render :file => '/path/to/some/filenotfound.rhtml', 
                status => 404, :layout => true
1 голос
/ 12 июня 2018

В Rails 5 вы можете использовать

head 404

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

0 голосов
/ 03 октября 2017

Если вы хотите выдать код состояния для перенаправления (например, 302), вы можете поместить его в routes.rb:
get "/somewhere", to: redirect("/somewhere_else", status: 302).
Однако это будет работать только для перенаправления, а не для прямой загрузки страницы.

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