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 -%>
廣告
© . All rights reserved.