3

我们在 routes.rb 中为 404s 使用以下包罗万象的路由:

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

但这会在下面生成 500 内部服务器错误,因为我们没有专门在error_404中捕获 PNG 格式。

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"

理想情况下,所有未知请求都会呈现default#error_404 HTML动作。我们不知道如何获取format.any来呈现 404 HTML 动作。如何使用错误 404 HTML 响应呈现所有未知请求?

4

1 回答 1

3

在应用程序控制器中: 使用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 回答