Это немного сложная проблема, особенно в случае ошибки 500.Поскольку 500 будет отображаться при обнаружении приложения и возникновении ошибки, вы не можете / не должны иметь динамическую страницу, которая обрабатывается контроллером - так как этот контроллер может быть источником проблемы.
Однако,в случае 404 вы можете настроить ErrorsController с действием 404 и использовать другой макет в зависимости от того, был ли запрос запросом XHR или нет.
Тогда все, что вам нужно, - это методв вашем ApplicationController
, например:
def render_404
render "errors/404", :status => 404
end
, что позволит вам вызывать ваш собственный обработчик ошибок в любом месте.
Вы можете расширить это, чтобы добавить поддержку ошибки 500 (где это уместно), но имейте в виду, что вам всегда понадобится статический 500.html в вашей общедоступной папке, если возникнет более серьезная проблема.