2016-09-09 13 views
2

私のアプリケーションコントローラでは、問題のない独自のエラーページを表示するために、さまざまな例外から救い出しています。たとえば、次のようにAbstractController :: Rails 5のActionNotFound例外から救助する方法は?

rescue_from ActiveRecord::RecordNotFound, with: :not_found 
rescue_from ActionView::MissingTemplate, with: :server_error 
# etc... 

次は動作しません。しかし:我々はそれを救うことができるように自分のアプリケーションのコントローラに到達する前に例外がAbstractControllerで提起されているので、私は理解して

rescue_from AbstractController::ActionNotFound, with: :not_found 

です。

私はこの例外から救助したいと思っています。私は解決策を見つけることができませんでした。
私がやってルータに例外を送信しようとしました:

のconfig/application.rb

config.exceptions_app = self.routes 

とのconfig/routes.rbを

仕事と思われません
get "*any", via: :all, to: "application#not_found" 

中をRails 3と4の最も一般的な答えです。私はRails 5.0.0を使用しています。どんな助けもありがとうございます。

答えて

0

私はこの同じ問題を今日解決しなければなりませんでした。これはすべてのシナリオにとって最良の方法ではないかもしれませんが、私にとってはうまくいきました。私がしたことは次のとおりです。

Rails 5では、他のコントローラが継承するApplicationControllerが得られました。これはあなたがすべてのコントローラに存在していない可能性がありますアクションをキャッチし、素敵な404

でそれらを処理するために、古典的なルビーの継承メソッドを使用できることを意味しますここでの例です:

再び
class ApplicationController < ActionController::Base 
    def index 
    show_nice_404 
    end 

    def show 
    show_nice_404 
    end 

    # new, edit, etc.. 
    # you can also use alias if you like 

    private 

    def show_nice_404 
    render 'some/404.html', layout: false, status: :not_found 
    end 
end 

、これはApplicationControllerにあるのでそれ以外のコントローラはすべてそれを継承します。正当なアクションはここで定義したアクションを単に上書きし、上書きされない場合は404ページを生成します。

注:これは一般的なRESTfulアクションでのみ行いましたが、試してみる前にテストスイートが確実であることを確認しますが、method_missingで試すことができます。

関連する問題