2017-02-21 6 views
0

エラーページをレンダリングし、エラーメッセージをRailsコントローラのrescue_fromセクションに渡したいとします。現在、次のようになっています:コントローラ `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 

あなたは普通のように、コントローラでインスタンスVARSを割り当てることができますコントローラーのアクションでは、ここでユーザーにメッセージを作成したり、好きなようにメッセージを処理したりすることができます。あなたapplication.rbファイルで

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

追加:

次に、あなたのルータのいくつかのルートを追加することができます

config.exceptions_app = self.routes 

そして最後は404.htmlおよび500を削除してください。あなたの公開ディレクトリにhtmlが存在する場合は、

注:

あなたが開発中にローカルでこれらのページを表示したい場合は、あなたのconfig/environments/development.rbを変更する必要があります:

config.consider_all_requests_local = false 
関連する問題