2017-02-21 61 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。我們想渲染一個rails模板。我們如何做到這一點,但也通過了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