如何在控制器`rescue_from`中渲染rails模板

时间:2017-02-21 15:56:12

标签: ruby-on-rails ruby-on-rails-4

所以我想渲染一个错误页面并在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吗?

内完成

1 个答案:

答案 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