2011-12-22 126 views
2

我正在使用我的web应用程序的API。它是一个Rails 2应用程序,REST API响应XML。以XML响应返回错误消息

例如,我需要返回一个错误,以防它无法从列表中取消订阅联系人。所以我用一个不可处理的实体(422)进行响应,并在XML中显示错误消息。这是实际的代码:

respond_to do |format| 
    begin 
    ... 
    format.xml { head :ok } 
    rescue => e 
    format.xml { render :xml => e.to_s, :status => :unprocessable_entity } 
    end 
end 

的问题是,在另一边,当有人使用作出征用ActiveResouce错误与消息到达空的,就像这样:

ActiveResource::ResourceInvalid: Failed. Response code = 422. Response message = . 

有什么XML结构或标记我需要放在响应中,对Response消息不要为空?

感谢

+0

我会检查一个调试器,无论错误format.xml被调用 - callstack可能会不同。 – Reactormonk 2011-12-22 13:38:56

回答

1

这看起来并不正确的对我说:

format.xml { render :xml => e.to_s, :status => :unprocessable_entity } 

render :xml,应传递一个XML字符串。尝试的东西取代它是这样的:

format.xml { render :xml => "<message ='#{e.to_s}'/>", :status => :unprocessable_entity } 
+0

谢谢。 我试了一下,但是错误信息仍然是空的。 – pedroaxl 2011-12-22 16:21:41

0

Rails的的ActiveResource验证文件指出,它预计的XML格式错误:

<errors><error>First cannot be empty</error></errors> 

我觉得它的设计来自于对象验证错误哈希(例如render :xml => record.errors)。不知道为什么你会想要捕捉异常,但应该表明一个更严重的问题,更类似于服务器错误。