3

404 には、routes.rb で次のキャッチオール ルートを使用します。

# Catches all 404 errors and redirects
match '*url' => 'default#error_404'

ただし、 error_404で特に PNG 形式をキャッチしないため、これにより以下の 500 内部サーバー エラーが生成されます。

Started GET "/images/doesnotexistyo.png" for 71.198.44.101 at 2013-03-08 07:59:24 +0300
Processing by DefaultController#error_404 as PNG
  Parameters: {"url"=>"images/doesnotexistyo"}
Completed 500 Internal Server Error in 1ms

ActionView::MissingTemplate (Missing template default/error_404, application/error_404 with {:locale=>[:en], :formats=>[:png], :handlers=>[:erb, :builder]}. Searched in:
  * "/home/prod/Prod/app/views"

理想的には、不明なリクエストはすべてデフォルトの#error_404 HTMLアクションをレンダリングします。format.anyを取得して 404 HTML アクションをレンダリングする方法がわかりません。エラー 404 HTML 応答ですべての不明な要求をレンダリングするにはどうすればよいですか?

4

1 に答える 1

3

Application Controller で: rescue_from を使用します

rescue_from "ActionController::UnknownAction", :with => :render_404
rescue_from "ActionController::RoutingError",  :with => :render_404

def render_404
  respond_to do |format|
    format.html { render :template => "<PATH_OF_404_ERROR_TEMPLATE>", :status => 404 }       
    format.xml { head 404 }
    format.js { head 404 }
    format.json { head 404 }
  end
  return false
end
于 2013-03-11T04:57:02.627 に答える