2010-07-29 4 views
10

JSON API 인터페이스가 포함 된 Rails 앱이 있습니다. 값을 올바르게 지정하면 컨트롤러가 행복 경로를 잘 처리하고 JSON이 출력으로 렌더링됩니다.Rails REST API에서 오류나 잘못된 요청을 처리하려면 어떻게해야합니까?

그러나 입력에 문제가있는 경우 예외가 발생하고 rescues의 일부 템플릿이 대신 렌더링됩니다. 실제로는 { "error": { "msg": "bad request", "params": ... } } 행의 JSON 오류와 적절한 HTTP 상태 코드 (예 : 인증되지 않은 경우 403)를 반환하고 싶습니다. 그러나 나는 이것 만이 example.com/api/...에있는 어떤 것에 대한 요청에 적용되기를 원합니다.

어떻게하면됩니까?

답변

4

API 컨트롤러에서 around_filter은 어떻습니까? 나는 또한 오류 유형에 따라 여러 구출을 가질 수

around_filter :my_filter 

private 
def my_filter 
    begin 
    yield 
    rescue 
    render :js => ... 
    end 
end 
13

같은 뭔가 내가 비슷한 경우가 있었다,하지만 난 방법 특정 오류가 필요하기 때문에 별도로 개별 API 방법을 구출. 내가 오류를 구출하기 때문에, 내가 명시 적으로 hoptoad API를 호출 할 필요 내 API 컨트롤러

def some_method 
    ## do stuff 
rescue 
    error(500, method_specific_error_code, "it all done broke") 
    ## additional error notifications here if necessary. 
end 

에 그런

def error(status, code, message) 
    render :js => {:response_type => "ERROR", :response_code => code, :message => message}.to_json, :status => status 
end 

: 내 응용 프로그램 컨트롤러에

, 나는 방법을했다. 난이 도움이되기를 바랍니다

def render_404 
    error(404, 404, "Unknown method") 
end 

:

처리하기 위해 인증, 나는 404 오류를 구출 login_required

def login_required 
    error(403, 403, "Not Authenticated") unless authenticated 
end 

그리고 대한 before_filter을했다!

+0

다른 동작에 대해서도 사용자 지정 오류를 렌더링하는 가장 좋은 방법이기 때문에 이에 동의합니다. –

+0

그냥 메모하지만'render : json => {...}'대신'render : js => {...}' –

관련 문제