2013-03-11 1 views
2

우리는 404에 대한 routes.rb에서 다음 포괄 경로를 사용각 파일 형식을 개별적으로 지정하지 않고 Rails 3.2의 모든 알 수없는 요청 (이미지 포함)에 대해 동일한 404 페이지를 렌더링하는 방법은 무엇입니까?

# 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로 렌더링 할 수 있습니까? 응용 프로그램 컨트롤러에

답변

2

:Use 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 
+0

은 무엇 거짓 어떻게 반환합니까? – Crashalot

+0

false를 반환 할 이유가 없습니다. – ben