我期待着看到一個解決方案(這本身並不是一個答案);我想強調幾點:
I want to check if first before going to view so I can show it my flash.
你怎麼能指望顯示在您的Flash錯誤?
很多時候,這種性質的錯誤導致了相當於fatal exception
,阻止應用程序進展。
當這種情況發生時,Rails有一些中間件捕獲異常並將它傳遞給錯誤處理頁面。我會在一分鐘內解釋這一點。
但事實仍然是,如果你要收到一個錯誤 - 你如何期待你的堆棧的其餘部分工作? 也許MYSQL表不存在 - 如果您在佈局中調用相同的數據或什麼?
什麼你要找的是兩件事情之一:
- A way to handle specific errors (IE no data)
- A way to rescue exceptions in a controlled manner (IE without having the default "exception" page from Rails.
config.exceptions_app
這是不是問題的答案,但它會幫助...
所有Rails異常都由中間件鉤子config.exceptions_app
處理:

的實際中間件是ActionDispatch::ShowException
,由此可以看出here。
您所獲得的任何「自定義例外頁面」教程都將基本掛鉤到config.exceptions_app
中間件中,可以使用self.routes
或控制器調用。
我一直參與custom error pages一段時間; I wrote a gem。有幾點需要理解它。
的Rails調用2套錯誤 - 40x
& 50x
:
40x
(如404
)是缺少資源
50x
(如500
)是服務器故障。
兩者之間的區別在於404錯誤(無論是否路由或無數據)都不是致命的。 500錯誤是致命(因爲它們阻止您的應用程序運行)。
500個錯誤無法通過應用程序的其餘基礎結構獲救;他們可能是來自你的數據庫的任何東西,沒有連接到沒有任何值的變量。
您希望拯救什麼類型的錯誤?
因此,如果它是「無數據」錯誤,您將能夠通過@variable.nil?
條件處理該錯誤。
如果是更嚴重的事情(問題進一步發展),您希望發生什麼?你的視圖&佈局會加載沒有數據?如果您的數據庫連接中斷?
-
我能給出的最好的建議是你的控制器&視圖中處理任何應用程序級異常,EG:
#app/views/data/object.html.erb
<% if @variable.any? %>
如果你想「美化」你的錯誤頁面,您最好使用here其中一項建議,或者僅使用我幫助編寫的exception_handler
寶石。
你用標準方式導軌會出現問題嗎?也就是說,如果您刪除了「rescue」條款,就會出現錯誤?如果是這樣,你想達到什麼目的? – ReggieB