2

エラーが発生するたびにカスタムページをレンダリングするために render_optional_error_file をオーバーライドしています。これは、アプリケーション内でエラーが発生した場合にうまく機能し、"shared/error.erb" を問題なくレンダリングします。

私のアプリケーション コントローラーには、ページの配色の設定、メニュー項目の定義、およびユーザーの認証を担当するいくつかの before_filters があります。これらは、望ましいアプリケーション エラーが発生したときにも実行されます。

ただし、ファイルの 404 ページがレンダリングされると、これらのフィルターは実行されないため、メニューのない黒いページが表示されます。これらを実行するようにトリガーする方法はありますか? また、これを行うべきではない理由はありますか?

4

2 に答える 2

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
于 2011-06-29T12:34:49.763 に答える
0

エラーページ用に特別なレイアウトを作成することを検討することをお勧めします。結局のところ、エラーページを通常のページと明確に区​​別できるようにするのが一般的な方法です。

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

于 2011-06-29T11:00:31.500 に答える