2015-05-26 18 views
2

我是新的rails。每當我的「應用程序崩潰」或「找不到頁面」或「例外」的情況下,我都想將重定向添加到「404頁面」。當rails應用崩潰時重定向到404

如果有人有很好的教程,請與我分享或提供一些簡單的解決方案。

我看了這個Rails_admin redirect to 404但它沒有解決我的問題。

+0

默認軌顯示在生產模式下500頁,如果您的應用程序失敗,400的時候沒有找到URL。注意:'在生產模式下' –

+0

如果你想添加自定義錯誤頁面,你可以參考http://ramblinglabs.com/blog/2012/01/rails-3-1-adding-custom-404-and-500-error -pages –

+0

謝謝,我正在嘗試這個。 –

回答

1

我有這個方法在我application_controller.rb

def not_found 
    raise ActionController::RoutingError.new('Not Found') 
end 

,然後在任何控制器,當我做一個find

@model = Model.find_by(id: params[:id]) or not_found 

我使用Rails 2此刻雖然所以它可能是你的版本略有不同。

+0

感謝您的回覆。我已經閱讀過這個答案,但是在這種情況下,我必須在所有控制器中定義「或找不到」。有沒有其他的方式,例如我在我的應用程序控制器中定義了救援並且在整個應用程序中工作。 –

+0

我不確定,您是否想出於美容原因顯示404?例如您是否希望人們在發生錯誤時認爲網頁不存在?一種方法可能是使用與您的500頁面相同的404頁面,但如果您想實際發送404響應,那麼我不確定是否有辦法用一攬子規則覆蓋缺省值500。 – martincarlin87

+0

您可能希望將'find(params [:id])'更改爲'find_by(id:params [:id])''。如果沒有找到記錄,'find'總是會引發異常,因此您的示例永遠不會到達'or not_found'部分。 – spickermann

1

Rails指南中有關於exception handling的章節。發生異常時,您可以使用rescue_from運行自定義方法。下面的例子是從引導和應添加到您的application_controller

rescue_from ActiveRecord::RecordNotFound, with: :record_not_found 

    private 

    def record_not_found 
    render plain: "404 Not Found", status: 404 
    end 

您可能要更改異常類型你想趕上任何異常。我想,你可以從每個異常的也搭上:

rescue_from StandardError, with: :record_not_found 

注:我認爲這是一個不好的做法,並會而不是僅僅設計我500錯誤頁面看起來那麼同樣我404頁。

+0

嗨,感謝您的回覆,這對我很有幫助。我只是想確認一下,這會在應用程序超時錯誤的情況下工作嗎? –

+0

取決於我猜測什麼是超時。應用程序或其前面的Web服務器或負載平衡器。 – spickermann

1

對於未找到404頁,即,我們可以重定向頁面定製路線。 爲此,您需要創建新的路徑,

匹配 「*路徑」,以: 「handle_errors#page_not_found」,通過:所有

這將重定向到handle_errors控制器page_not_found行動。 顯然,你需要創建一個新的控制器handle_errors

對於任何其他異常出現在應用程序,你可以使用一些application controller客戶的方法

rescue_from的ActiveRecord :: RecordNotFound,處理:用=>: record_not_found_error_handler rescue_from的ActiveRecord :: RecordNotUnique,:用=>:default_error_handler

如等等...

與方法作爲認定中,

def default_error_handler(e) 
    render 'handle_errors/page_404', :status => 404 
end 

def record_not_found_error_handler(e) 
    render 'handle_errors/record_not_found' 
end