Ruby on Rails 2.1 - 异常处理


执行和异常总是一起出现的。如果您打开的文件不存在,那么您需要正确处理这种情况,否则您的程序将被认为质量不合格。

如果发生异常,程序就会停止。异常用于处理程序执行期间可能发生的各种类型的错误,并采取适当的操作而不是完全停止程序。

Ruby on Rails 中的异常处理与 Ruby 中的异常处理类似。这意味着,我们将可能引发异常的代码包含在开始/结束块中,并使用救援子句告诉 Ruby 我们要处理的异常类型。

句法

begin  
   # -  
      rescue OneTypeOfException  
   # -  
      rescue AnotherTypeOfException  
   # -  
   else  
      # Other exceptions
      ensure
   # Always will be executed
end

开始救援的一切都受到保护。如果在执行此代码块期间发生异常,则控制权将传递到rescueend之间的块。

对于开始块中的每个救援子句,Ruby 依次将引发的异常与每个参数进行比较。如果救援子句中指定的异常与当前引发的异常的类型相同,或者是该异常的超类,则匹配将成功。

在哪里记录错误?

抛出异常时,您有三个选择 -

  • 记录到内部日志文件 (logger.error)

  • 向用户显示适当的消息

  • 重新显示原始页面以继续

向应用程序报告的错误是通过称为flash 的结构完成的。闪存是一个哈希桶,用于包含您的消息,直到下一个请求才会被自动删除您可以使用 @flash 变量访问它。下面给出的是使用记录器模块在内部文件中记录错误消息的最简单形式。

begin
.........
rescue Exception => exc
   logger.error("Message for the log file #{exc.message}")
   flash[:notice] = "Store error message"
   redirect_to(:action => 'index')
end

要在视图或布局 (.html.erb) 中显示来自 @flash 的所有消息,您可以添加以下内容 -

<% @flash[:notice] -%>
<div id="notice"><%= @flash[:notice] %></div>
<% end -%>