ruby-on-rails - 如何在 Rails 6 中使用rescue_from?
问题描述
显然rescue_from
应该捕获异常,但这不能按预期工作:
class ApplicationController < ActionController::Base
rescue_from ActionController::RoutingError, with: :not_found
def not_found
text: 'Not found'
end
end
规格:
specify 'Not found' do
visit '/zzz'
expect(page.status_code).to eq 200
end
Failure/Error: visit '/zzz'
ActionController::RoutingError:
No route matches [GET] "/zzz"
在开发环境中的行为相同。
但是,挽救其他错误(例如)RuntimeError
确实可以按预期工作。
文档:https ://apidock.com/rails/v6.0.0/ActiveSupport/Rescuable/ClassMethods/rescue_from
导轨 6.0.2
为什么不能RoutingError
和 一起使用rescue_from
?在调用控制器之前,RoutingError 是在中间件中引发还是由路由器引发?有没有其他方法可以捕捉RoutingError
?
解决方案
在到达控制器之前会引发路由器错误,您可以在 routes.rb 文件末尾使用通配符路由来匹配与其他路由不匹配的任何内容,并将该点路由到特定控制器操作。
就像是:
match '*foo', to: 'application#not_found'
(没试过,你可能需要稍微调整一下,但我认为这个想法很清楚)
推荐阅读
- javascript - e2e 测试是否应该将数据保存在真实数据库中?
- javascript - Discord text output alternative
- firebase - Firebase response payload different from documentation
- sinon - 当我尝试测试方法时如何模拟函数的请求
- python - Python 中的 While 循环 - 数组操作
- r - 惰性求值问题 - tibble 中的函数
- regex - Regex to describe binary numbers
- python-3.x - 如何用python中的while循环替换以下代码中的注释
- python - Issues scraping HTML code with Selenium WebDriver: Returned URL and action values different from the console value
- java - 从 Java-12 中的 switch 表达式返回泛型值