2017-01-06 69 views
0

我在我的Rails應用程序中設置了自定義錯誤頁面。Rails 500錯誤顯示PUT請求的空白頁面

application.rb中

config.exceptions_app = self.routes

的routes.rb

get '404', to: 'application#page_not_found' 
    get '422', to: 'application#server_error' 
    get '500', to: 'application#server_error' 

application_controller.rb

def page_not_found 
    respond_to do |format| 
     format.html { render template: 'errors/not_found_error', layout: 'layouts/application', status: 404 } 
     format.all { render nothing: true, status: 404 } 
    end 
    end 

    def server_error 
    respond_to do |format| 
     format.html { render template: 'errors/internal_server_error', layout: 'layouts/error', status: 500 } 
     format.all { render nothing: true, status: 500} 
    end 
    end 

我的自定義500錯誤頁面顯示正常,當我做一個引發錯誤的GET請求,但是當我提交一個表單觸發一個NoMethodError,所以一個PUT請求,我只是得到一個空白頁。

任何想法爲什麼500錯誤頁面正確顯示GET請求,但不是PUT請求?

我試圖改變server_error方法

def server_error 
    render template: 'errors/internal_server_error', layout: 'layouts/error', status: 500 
    end 

,但這似乎並沒有幫助。

讓我知道如果我可以提供更多的代碼,我不知道如何解決這個問題。

+1

嘗試改變'GET'到'match'。 – sahil

+1

在'get'路由中意味着GET請求,如'put','post','patch'和'delete'。正如@ sa77回答,嘗試使用匹配'via::all'來代替。 –

+0

請接受答案,如果它幫助和關閉的問題,以便有類似問題的人可以很容易地找到它 – sa77

回答

4

使用matchvia您的routes.rb路由所有類型的HTTP請求的自定義錯誤操作

# error routes 
    match '/404' => 'application#page_not_found', :via => :all 
    match '/422' => 'application#unprocessable_entity', :via => :all 
    match '/500' => 'application#server_error', :via => :all 
+0

感謝這工作。我認爲'匹配'雖然被棄用。 https://github.com/rails/rails/issues/5964 – user4584963

+0

一些使用匹配的情況像使用'match:via =>:get'那樣使用特定的http動詞折舊,使用通用路由'match'/:controller /:action''等。您需要瀏覽rails gem的代碼庫來調查furthur'bundle open rails'。但是,您不會因使用'match:via =>:all'而得到DEPRECIATION警告。 – sa77