所以我想渲染一个错误页面并在Rails控制器的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 :(得分: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