如何检查变量是否有错误

时间:2015-09-30 07:53:05

标签: ruby-on-rails ruby-on-rails-4

如何在查看之前检查变量是否在控制器中出错。

在我的控制器中:

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

例如我有错误ActiveRecord::StatementInvalid: Mysql2::Error: Table 'models' doesn't exist: ...

我想在查看前先检查一下是否可以显示我的闪光灯。

2 个答案:

答案 0 :(得分:4)

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

  

我想先查看是否先查看所以我可以将它显示给我   闪光灯。

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

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

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

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

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

  
      
  1. 处理特定错误的方法(IE无数据)
  2.   
  3. 一种以受控方式拯救异常的方法(IE没有默认"异常"来自Rails的页面。
  4.   

config.exceptions_app

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

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

enter image description here

实际的中间件是ActionDispatch::ShowException,可以看到here

任何"自定义异常页面"您获得的教程将基本上挂钩config.exceptions_app中间件,使用self.routes或控制器调用。

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

Rails调用了2组错误 - 40x& 50x

  • 40x(如404)用于缺少资源
  • 50x(如500)用于服务器故障

两者之间的区别在于404错误(无路由或无数据)不是致命的。 500个错误 致命(因为它们阻止您的应用运行)。

使用应用程序的其他基础架构无法挽救500个错误;它们可能是您的数据库中没有连接到没有任何值的变量的任何内容。

您希望拯救哪种类型的错误?

因此,如果它是"没有数据"错误,您将能够处理@variable.nil?条件。

如果它更严重(堆栈中存在问题),您期望发生什么?你的观点&布局将加载没有数据?如果数据库连接断开怎么办?

-

我能给出的最佳建议是处理控制器中的任何应用级异常。观点,EG:

#app/views/data/object.html.erb
<% if @variable.any? %>

如果你想&#34;美化&#34;您的错误页面,您最好使用其中一个建议here,或者只使用我帮助编写的exception_handler gem。

答案 1 :(得分:0)

使用此代码:

@sample_models.select{|sm| sm.errors.present?}.collect(&:errors)