2011-06-29 35 views
2

我重寫render_optional_error_file以在出現錯誤時呈現自定義頁面。如果應用程序中存在錯誤,這非常有效,它可以毫無問題地呈現「shared/error.erb」。Rails 2.3中的404自定義錯誤頁面

我的應用程序控制器有幾個before_filters,它們負責設置頁面的顏色方案,定義菜單項和驗證用戶。當出現應用程序錯誤時,這些也會運行,這是所需的。

但是,當一個文件的404頁面被渲染時,這些過濾器都沒有運行,所以我得到一個沒有菜單的黑色頁面。有什麼方法可以觸發這些運行?我有什麼理由不應該這樣做?

回答

2

當Rails遇到缺少的文件時,它會在應用程序控制器上運行狀態爲404的render_optional_error_file(404),但會跳過所有過濾器,可能是因爲已經發生錯誤。

我添加了一個名爲run_filters方法,我的應用程序控制器,然後調用從render_optional_error_file:

def run_filters 
    #run filters or whatever 
end 

def render_optional_error_file(status) 
    run_filters 
    render "shared/error", :status => status 
end 

您還可以測試你的開發服務器上的這種行爲通過在應用程序控制器中的以下內容:

alias_method :rescue_action_locally, :rescue_action_in_public 
0

那麼,你可能想考慮爲你的錯誤頁面創建一個特殊的佈局。畢竟,將錯誤頁面與正常頁面明確區分是常見的做法。

但我不明白爲什麼你的應用程序控制器中定義的過濾器不觸發。他們真的應該觸發之前任何錯誤發生在您的行動。 您能否向我們提供您的應用程序控制器的一些代碼?