gpt4 book ai didi

ruby-on-rails - 如何检查变量是否有错误

转载 作者:行者123 更新时间:2023-12-03 15:56:28 26 4
gpt4 key购买 nike

如何在查看之前检查变量在我的 Controller 中是否有错误。

在我的 Controller 中:

def index
@sample_model = Model.all
rescue => e
flash.now[:alert] = e.message
end

例如我有错误 ActiveRecord::StatementInvalid: Mysql2::Error: Table 'models' doesn't exist: ...
我想在查看之前先检查一下,这样我就可以向它展示我的闪光灯了。

最佳答案

我期待看到一个解决方案(这本身不是一个答案);我想强调几点:

I want to check if first before going to view so I can show it my flash.



您希望如何在闪存中显示错误?

很多时候,这种性质的错误会导致相当于 fatal exception ,阻止应用程序取得任何进展。

当这种类型的事情发生时,Rails 有一些中间件来捕获异常,并将其传递给错误处理页面。我会在一分钟内解释这一点。

但是,事实仍然是,如果您将收到错误 - 您希望堆栈的其余部分如何工作? 可能MYSQL表不存在 -- 如果你在布局中调用相同的数据或其他什么?

您正在寻找的是以下两件事之一:

  1. A way to handle specific errors (IE no data)
  2. A way to rescue exceptions in a controlled manner (IE without having the default "exception" page from Rails.


config.exceptions_app

这不是答案,但它会有所帮助......

所有 Rails 异常都由名为 config.exceptions_app 的中间件 Hook 处理。 :

enter image description here

实际的中间件是 ActionDispatch::ShowException ,可见 here .

您获得的任何“自定义异常页面”教程基本上都会与 config.exceptions_app Hook 。中间件,使用 self.routes或 Controller 调用。

我参与了 custom error pages一段时间; I wrote a gem为了它。有几个要点需要理解。

Rails 调用 2 组错误 - 40x & 50x :
  • 40x (如 404 )用于缺少资源
  • 50x (如 500 )用于服务器故障。

  • 两者的区别在于 404 错误(没有路由,或者没有数据)不是致命的。 500 错误是致命的(因为它们会阻止您的应用程序运行)。

    500 错误无法用应用程序的其他基础设施来挽救;它们可能是您数据库中的任何内容,与没有任何值的变量没有连接。

    您希望挽救什么类型的错误?

    因此,如果它是“无数据”错误,您将能够使用 @variable.nil? 来处理它。条件。

    如果它是更严重的事情(一个问题更进一步),你预计会发生什么?您的 View 和布局将在没有数据的情况下加载?如果您的数据库连接中断怎么办?

    --

    我能给出的最好建议是在你的 Controller 和 View 中处理任何应用程序级异常,例如:
    #app/views/data/object.html.erb
    <% if @variable.any? %>

    如果你想“美化”你的错误页面,你最好使用建议之一 here ,或简单地使用 exception_handler 我帮助写的 gem 。

    关于ruby-on-rails - 如何检查变量是否有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32860750/

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