2010-07-14 181 views
0

有人可以解釋catch_exceptions中的代碼嗎?ruby​​ on rails 3 question

我很難理解。

感謝

class ApplicationController < ActionController::Base 
    around_filter :catch_exceptions 

    private 

    def catch_exceptions 
    yield 
    rescue => exception 
    logger.debug "Caught exception! #{exception}" 
    raise 
    end 
end 

回答

4

簡單。

您首先需要了解around_filter的概念。它會在方法調用周圍放置一些東西。你也需要了解YIELD,即執行一個塊。

所以如果你有像索引動作的東西。

def index 
    # run code run 
end 

這意味着它將作爲一個塊到around_filter,將執行,正如好象它是被髮送...

def catch_exceptions 
    def index 
     #run code run 
    end 
    rescue => exception 
    logger.debug "Caught exception! #{exception}" 
    raise 
    end 
1

catch_exceptions是採用一個塊的方法。你可以告訴它,因爲它包含一個yield(它執行傳入的塊)。

該方法捕獲在該塊中發生的任何異常,記錄它們,然後重新拋出它們,以便其他代碼也可以捕獲它。

'around_filter'這一行讓rails通過每個控制器方法來代替catch_exceptions方法。

整體結果是控制器方法拋出的所有異常都被記錄下來。