2010-07-29 45 views
10

我有一個包含JSON API接口的Rails應用程序。當正確指定值時,控制器將處理快樂路徑,JSON將呈現爲輸出。我如何在Rails REST API中處理錯誤或錯誤的請求?

但是,如果輸入存在問題,則會引發異常,而代之以呈現rescues中的某些模板。我真的只想按照{ "error": { "msg": "bad request", "params": ... } }和適當的HTTP狀態碼(例如,如果它們沒有通過驗證,403)返回JSON錯誤。但我只希望這適用於針對example.com/api/...中的任何內容的請求。

我該怎麼做?

回答

4

你的api控制器上的around_filter怎麼樣?像

around_filter :my_filter 

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

東西,我也有類似的情況,但我單獨救出個人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 

然後,因爲我救了錯誤,我需要顯式調用的API黽:

在我的應用程序控制器,我有一個方法。

爲了處理認證,我有一個before_filterlogin_required

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

而且救404錯誤:

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

我希望這有助於!

+0

我也同意你的看法,因爲這是爲不同動作呈現自定義錯誤的最佳方式 – 2010-07-29 11:48:21

+0

只是一個提示,但你可以改爲渲染:json => {...}而不是渲染:js => {...}' – 2013-01-15 19:57:55