当出现错误时,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文档也值得一看。