gpt4 book ai didi

ruby-on-rails-4 - 在 before_action 短路自定义 ​​404 页面处理程序中引发异常

转载 作者:行者123 更新时间:2023-12-05 06:45:34 27 4
gpt4 key购买 nike

我成功地使用了 this technique如果出现问题(例如错误的参数),通过在我的 Controller 的 before_action 中引发 RoutingError 以编程方式将用户发送到自定义 404 页面:

before_action :check_invalid_params

def check_invalid_params
raise ActionController::RoutingError.new('Not Found') if params[:foo].present?
end

这在我的 Controller 中运行良好,但我最近尝试将一些常见错误检查到 ApplicationController 父类(super class)中,以便将 before_action 应用于所有我的 Controller 。

不幸的是,如果您从 ApplicationController 中的 before_action 回调中抛出异常,自定义错误页面处理就会短路,您最终会遇到中间件生成的通用 500 错误(就像在 this question 上一样):

500 Internal Server Error
If you are the administrator of this website, then please read this web application's
log file and/or the web server's log file to find out what went wrong.

有没有办法从 ApplicationController 中的 before_action 引发异常并且仍然​​有自定义错误页面处理?有没有更好的方法来实现这一目标?

最佳答案

如果您能够通过检查参数来处理错误,我建议您避免引发错误。所以对于你的情况我会这样做:

def check_invalid_params
render json:{error: 'foo not found'}, :status => 422 if params[:foo].present?
end

如果你调用了一个可能会失败的方法

def some_before_action
call_external_service
rescue
render json:{error: 'Internal Server Error'}, :status => 500
end

此时你可以渲染任何你想要的(json 是一个简单的例子)

关于ruby-on-rails-4 - 在 before_action 短路自定义 ​​404 页面处理程序中引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23043327/

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