我期待看到一个解决方案(这本身并不是一个答案);我想强调几点:
我想先检查一下,然后再查看 ,这样我就可以展示我的
闪光。
您希望如何在 Flash 中显示错误?
很多时候,这种性质的错误会导致相当于fatal exception,从而阻止应用程序取得任何进展。
当这种类型的事情发生时,Rails 有一些中间件来捕获异常,并将其传递给错误处理页面。我会在一分钟内解释这一点。
但事实仍然是,如果您将收到错误 - 您希望堆栈的其余部分如何工作? 也许 MYSQL 表不存在 -- 如果你在布局中调用相同的数据或其他什么?
您正在寻找的是以下两件事之一:
- 一种处理特定错误的方法(IE 无数据)
- 一种以受控方式挽救异常的方法(IE 没有来自 Rails 的默认“异常”页面。
config.exceptions_app
这不是答案,但会有所帮助...
所有 Rails 异常都由名为 config.exceptions_app 的中间件挂钩处理:
实际中间件是ActionDispatch::ShowException,可见here。
您获得的任何“自定义异常页面”教程基本上都将通过self.routes 或控制器调用与config.exceptions_app 中间件挂钩。
我参与custom error pages 已经有一段时间了; I wrote a gem 为它。有几个要点需要理解。
Rails 调用 2 组错误 - 40x 和 50x:
-
40x(如404)用于缺少资源
-
50x(如500)用于服务器故障。
两者的区别在于 404 错误(要么没有路由,要么没有数据)不是致命的。 500 个错误是致命的(因为它们会阻止您的应用运行)。
500 错误无法通过您应用的其他基础架构来挽救;它们可能是您数据库中与没有任何值的变量没有连接的任何内容。
您希望解决什么类型的错误?
因此,如果是“无数据”错误,您可以使用@variable.nil? 条件处理。
如果是更严重的问题(问题更进一步),您预计会发生什么?您的视图和布局将在没有数据的情况下加载?如果您的数据库连接中断怎么办?
--
我能给出的最佳建议是在您的控制器和视图中处理任何应用级异常,例如:
#app/views/data/object.html.erb
<% if @variable.any? %>
如果你想“美化”你的错误页面,你最好使用here 的建议之一,或者干脆使用我帮助编写的exception_handler gem。