ruby-on-rails - 无法为我不使用的格式拯救 ActionController::UnknownFormat
问题描述
我加入了许多想要拯救ActionController::UnknownFormat
他们的 Rails 应用程序但无能为力的人的行列。
我更愿意拯救我不关心的异常,既可以为被误导的使用提供更好的错误页面,也可以让我的异常跟踪器保持安静。
我试图解决的两种情况是:
- 像这样的 URL
/catalog.xml
(我只响应 HTML 请求) - 具有限制格式的请求,例如:变体。request.formats: ["application/json", "text/javascript", "application/xml"] (通常是机器人)
我所做的研究表明这个解决方案是最好的方法,但不幸的是,它对我不起作用。
在app/controllers/application_controller.rb
,我有这个:
rescue_from ActiveRecord::RecordNotFound, :with => :render_standard_error
rescue_from ActionController::UnknownFormat, :with => :render_standard_error
rescue_from ActionController::InvalidAuthenticityToken, :with => :render_token_error
这很好用,除了ActionController::UnknownFormat
.
该render_standard_error
方法只是设置一些环境默认值并呈现错误页面。
我预计这rescue_from ActionController::UnknownFormat
会像它对其他错误类型的工作方式一样工作,但没有捕获到异常。
我敢肯定我在这里遗漏了一些非常明显的东西,但如果我能弄清楚的话,该死的。
我将 Rails 5.2.2 与乘客 5.3.1 一起使用。
更新:
我实际上看到了两种不同的行为:
- 当我去 时
/catalog.xml
,我得到:
ActionController::UnknownFormat at /catalog.xml
ProductsController#index is missing a template for this request format and variant.
request.formats: ["application/xml"]
request.variant: []
- 但是如果我尝试
/catalog.invalid
,目录页面会正常加载,就好像我只使用了/catalog
.
解决方案
我无法复制您的问题。这是我尝试过的:
- 启动了一个新的 Rails 应用程序。
- 我创建了一个 Person 脚手架(名称作为唯一的列)。然后我运行了迁移。
- 然后我将以下内容粘贴到我的应用程序控制器中:
Stack Overflow 无法正确格式化,所以我将其粘贴在这里: https ://gist.github.com/BKSpureon/391b0da243b32936334d7989f3e3cadb
似乎引发并捕获异常就好了?!请发布更多信息:您希望在哪里引发错误。
脚步
- 你能手动抛出和捕获异常吗?
- Rails 可能会做一些有趣的事情:如果您要求的格式不存在,rails 可能会触发另一个异常。您是否能够在您期望跌倒的控制器中添加一个 byebug 语句,然后一直观察它?
推荐阅读
- haskell - 如何修复 Haskell 中的内存泄漏(thunk 泄漏?)?
- javascript - 从网格按钮访问 TitleBar 关闭事件
- regex - Python 3 Regex - 从字符串之间间距未知的句子中提取未知子字符串
- html - 如何仅使用 html 和 css 制作百分比圆圈,其中写有百分比
- jquery - 在 jQuery 中使用 after() 后如何向元素添加属性
- python - 创建 __repr__ 以打印子类数据
- java - PDF easytable - 我可以在单元格中插入表格吗?
- c# - 创建具有对现有数据库的路由访问权限的 .NET Core Web api
- python - 有没有办法在python中包含±(加号或减号)?
- python - 如何在 python 的 pandas 中创建没有日期的时间索引 df?