2011-06-29 12 views
2

エラーが発生したときに、いつでもカスタムページを表示するためにrender_optional_error_fileをオーバーライドしています。これは、アプリケーション内でエラーが発生した場合にうまく動作し、 "shared/error.erb"を問題なくレンダリングします。404 Rails 2.3のカスタムエラーページ

私のアプリケーションコントローラには、ページの配色を設定し、メニュー項目を定義し、ユーザーを認証する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

まあ、エラーページ用の特別なレイアウトを作成することを検討してください。結局のところ、エラーページを通常のページとはっきり区別できるようにするのが一般的な方法です。

しかし、アプリケーションコントローラで定義された前のフィルタがトリガーしない理由はわかりません。彼らは実際にの前にをトリガーする必要があります。 アプリケーションコントローラのコードをご提供いただけますか?

関連する問題