2012-06-21 2 views
2

어떻게 RecordNotFound를 처리 할 수 ​​있는지 알고 있습니다레일 - 예외 처리

그러나 라우팅 오류 ([GET]과 일치하지 않는 경로)를 어떻게 처리 할 수 ​​있습니까? - 내가 대답을 찾을 수없는이 주제에

PS 당신 config/routes.rb의 다른 모든 경로 후 Rails - how to handle routes that don't exist ("No route matches [GET]")?

+0

라우트를 변경하거나 컨트롤러를 변경하거나 뷰를 사용하여 통화 오류를 수정해야한다고 생각합니다. 경로. 나는 오류를 '처리'하는 것과는 대조적으로 다른 질문 (또는 다시 실행)에이 코드를 집중적으로 게시합니다. –

답변

3

을이 줄을 추가 :

match '*url' => 'errors#routing' 

그런 다음 ErrorsController라는 컨트롤러를 작성을하고 routing를 추가 어떤 페이지에서 params[:url]을 사용하면 어떤 URL이 원인인지 알 수 있습니다.

그런데 웹 사이트에 죽은 링크가 있는지 확인하는 좋은 방법입니다.

희망이 있습니다.

+0

고맙습니다 =) – user1466717

6

라우팅을 처리하는 또 다른 방법 (다른 모든)은 당신의와 ApplicationController에 다음을 추가하는 것입니다

unless Rails.application.config.consider_all_requests_local 
    rescue_from Exception do |e| 
    render_500 e 
    end 
    rescue_from ActionController::RoutingError, with: :render_404 
    rescue_from ActionController::UnknownController, with: :render_404 
    rescue_from ActionController::UnknownAction, with: :render_404 
    rescue_from ActiveRecord::RecordNotFound, with: :render_404 
end 

그런 다음 그들이 실제로 뭔가를 렌더링 할 수 있도록 render_500render_404을 정의해야합니다.

def render_404(exception) 
    @not_found_path = exception.message 
    respond_to do |format| 
    format.html { render template: 'errors/error_404', layout: 'layouts/application', status: 404 } 
    format.all { render nothing: true, status: 404 } 
    end 
end 

을 그리고 errors/error_404에서 템플릿을 만들어 내 응용 프로그램에서 나는 완료했습니다. 그런 식으로 모든 라우팅 오류를 처리하고 응용 프로그램 레이아웃을 계속 사용합니다.

@not_found_path를 사용하여 오류를 사용자에게 표시 할 수 있습니다.

+0

이 메서드를 사용하여 "RecordNotFound"예외를 catch했습니다. 고맙습니다. – user1466717