Вот что я придумал, пытаясь найти универсальное универсальное решение для маршрутизации исключений. Он обрабатывает большинство популярных типов контента.
routes.rb
get '*unmatched_route', to: 'errors#show', code: 404
ErrorsController
class ErrorsController < ApplicationController
layout false
# skipping CSRF protection is required here to be able to handle requests for js files
skip_before_action :verify_authenticity_token
respond_to :html, :js, :css, :json, :text
def show
respond_to do |format|
format.html { render code.to_s, status: code }
format.js { head code }
format.css { head code }
format.json { render json: Hash[error: code.to_s], status: code }
format.text { render text: "Error: #{ code }", status: code }
end
end
private
def code
params[:code]
end
end
ErrorsController
разработан, чтобы быть более универсальным, для обработки всех видов ошибок.
Рекомендуется создать собственное представление для ошибки 404 в app/views/errors/404.html
.