2017-02-21 50 views
0

Итак, я хочу отобразить страницу с ошибкой и передать сообщение об ошибке внутри раздела rescue_from в контроллере Rails. Это выглядит так:Как визуализировать шаблон рельсов в контроллере `rescue_from`

rescue_from ActiveSupport::MessageVerifier::InvalidSignature do 
    render json: { errors: I18n.t(:invalid_token, scope: :errors) }, status: :bad_request 
end 

Но мы больше не хотим рендерить json. Мы хотим отобразить шаблон рельсов. Как мы это делаем, но также передаем хэш-код errors? Можно ли это сделать внутри rescue_from?

ответ

0

Общий способ реагирования при возникновении ошибок заключается в использовании exceptions_app для вашего приложения, сначала создайте контроллер для обслуживания ошибочных ответов:

class ErrorsController < ApplicationController 
    def not_found 
    @details = "foo bar, something that happened in this request" 
    render status: 404 
    end 

    def internal_server_error 
    render status: 500 
    end 
end 

Вы можете назначить экземпляр вары в контроллере, как обычные действия контроллера, здесь вы можете создать сообщение пользователю или обработать его, как вам нравится.

Затем вы можете добавить несколько маршрутов в маршрутизаторе:

match "/404", to: "errors#not_found", via: :all 
match "/500", to "errors#internal_server_error", via: :all 

В вас application.rb файл, добавьте:

config.exceptions_app = self.routes 

И последний обязательно удалить 404.html и 500. html в вашем публичном каталоге, если они присутствуют.

Примечание:

Если вы хотите, чтобы эти страницы локально в процессе разработки вам нужно изменить ваш config/environments/development.rb:

config.consider_all_requests_local = false