Ruby on Rails 2.1 - 异常处理

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

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

Ruby on Rails 中的异常处理与 Ruby 中的异常处理类似。这意味着,我们将可能引发异常的代码封装在 begin/end 块中,并使用 rescue 子句告诉 Ruby 我们要处理的异常类型。

语法

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

beginrescue 的所有内容均受到保护。如果在执行此代码块期间发生异常,则控制权将传递到 rescueend 之间的代码块。

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

在哪里记录错误?

抛出异常时,您有三个选项 −

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

  • 向用户显示适当的消息

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

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

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 -%>