当出现错误时,Rails在请求JSON时呈现HTML

我正在使用Rails作为仅JSON的API服务器,但是当控制器中存在exception时,比如当它不存在时尝试删除ID为1的记录时,Rails不会响应JSON它响应使用HTML,无论是开发中的跟踪还是生产中的通用“出错”页面。

现在我正在救援所有东西并手动吐出JSON响应……

class AmazonAccountsController  {:errors => {:bad => "ID doesn't exist."}}.to_json end end end 

但这似乎不是理想的处理方式。

这是在Rails 3中。

您正在寻找rescue_from

如果你想在捕获错误时做一些更精细的事情,你可以使用rescue_from ,它处理整个控制器及其子类中某种类型(或多种类型)的exception。

当发生由rescue_from指令捕获的exception时,exception对象将传递给处理程序。 处理程序可以是传递给: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 

关于rescue_from的API文档也值得一看。