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