gpt4 book ai didi

ruby-on-rails - 为 422 错误生成错误页面

转载 作者:太空宇宙 更新时间:2023-11-03 18:07:32 25 4
gpt4 key购买 nike

我目前正在为 500 和 404 错误生成动态错误页面。我想将其扩展为 422 个错误。这是我们目前所拥有的。

配置/应用程序.rb

config.exceptions_app = self.routes

controllers/errors_controller.rb

class ErrorsController < ApplicationController
def not_found
render status: 404
end

def internal_server_error
render status: 500
end

def unacceptable
render status: 422
end
end

路线.rb

get '/404' => 'errors#not_found'
get '/500' => 'errors#internal_server_error'
get '/422' => 'errors#unacceptable'

public/422.html 页面已被删除。已创建错误 View 页面,但为简洁起见省略了。当出现 404 或 500 错误时,将显示错误页面。但是,当我收到 422 错误时,我会看到以下错误页面。

enter image description here

我看过很多教程都采用了同样的方法,而且效果很好。但是,我收到了生成的 Rails 错误,而不是我创建的错误页面。出了什么问题,我该如何解决?

我看过的教程:

最佳答案

我是与@jason328 一起从事此工作的另一位开发人员。结果证明这是一个多部分问题,首先是一般的 422 错误,然后是 Rails 引发 ActiveRecord::InvalidAuthenticityToken 而未呈现相应页面的特定场景。

1。一般 422 错误

Rails 错误页面

我们通过设置 config.consider_all_requests_local = false 在本地开发环境中暂时摆脱了这一点。但是,我们得到的不是我们的自定义错误页面,而是一个空白的白页。

空白的白页

根据 this Stack Overflow question , 我们需要 match '/422', to: 'errors#unprocessable_entity', via: :all 作为路由而不是 get '/422' => 'errors#unprocessable_entity'

此时,通用 422 错误已按预期执行。我们设置了一个 Controller 操作,它会在您点击它时立即引发 ActiveRecord::InvalidAuthenticityToken,并呈现我们的自定义 422 页面。因此,对于一般遇到 422 错误问题的任何人,以上内容应该涵盖了您。

2。无效的真实性 token

但由于 422 错误的一个常见原因实际上是在野外遇到 InvalidAuthenticityToken 错误,因此似乎值得描述我们所看到的问题的其余部分。在应用生成自己的 InvalidAuthenticityToken 错误的实际情况下,我们现在收到纯文本 500 错误,而不是我们自定义的 422 页面。

纯文本 500 错误

我们能够将其追溯到 ActionDispatch::ShowExceptions#render_exception 中的 FAILSAFE_RESPONSE .这是 Rails 获取抛出的异常并将其转换为 [status, body, headers] 响应数组的地方。如果在此期间抛出另一个异常,而不是陷入无限循环,它会放弃并返回 FAILSAFE_RESPONSE。 .在这种情况下,另一个 InvalidAuthenticityToken 错误在汇总响应时被抛出。

此时,是时候使用 :rescue_from 策略了:

rescue_from ActionController::InvalidAuthenticityToken,
with: :rescue_invalid_authenticity_token

def rescue_invalid_authenticity_token
#...notify services as if this error weren't being rescued

redirect_to '/422'
end

通过重定向来保护我们免受同一请求中的任何更多 InvalidAuthenticityToken 错误的影响。

关于ruby-on-rails - 为 422 错误生成错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41578159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com