2012-07-15 127 views
1

我使用Rails作为JSON专用的API服务器,但每当在控制器中出现异常时,例如尝试删除ID为1的记录时它不存在,Rails没有响应JSON,它用HTML做出响应,如果在开发中,或者在生产中出现一些通用的“出错的页面”,则为trace。当出现错误时请求JSON时,Rails呈现HTML

现在我在包装救援的一切,手动吐出一个JSON响应...

class AmazonAccountsController < ApplicationController 

    respond_to :json, :xml 

    def destroy 
    # Handle bad API calls. 
    begin 
     @account = AmazonAccount.find(params[:id]) 
     @account.destroy 
     # unrelated code... 
    rescue 
     render :json => {:errors => {:bad => "ID doesn't exist."}}.to_json 
    end 
    end 

end 

但这似乎并不像处理这种理想的方式。

这是Rails的3

回答

1

您正在寻找rescue_from

如果你想要做一些更复杂的捕捉错误的时候,你可以使用rescue_from,它处理的例外整个控制器及其子类中的某种类型(或多种类型)。

当异常发生被rescue_from指令捕获时,异常对象被传递给处理程序。处理程序可以是传递给:with选项的方法或Proc对象。您也可以直接使用块而不是明确的Proc对象。

所以你可以做这样的事情:

class ApplicationController < ActionController::Base 
    rescue_from your_list_of_exceptions..., :with => :some_exception_handler 
private 
    def some_exception_handler 
     render :json => { :error => 'some error message of some sort' }, :status => :unprocessable_entity # or whatever status makes sense. 
    end 
end 

API documentation on rescue_from是值得一试为好。

+0

杰出。谢谢! – 2012-07-15 06:22:51

相关问题