0

我之前问过类似的问题,但从未得到答案,这是一个简短的版本

我有一个用户活动资源模型。我在我的客户上对服务进行了简单的调用

response = User.find(id).put(:activate, :activation_code => activation_code)

如果服务出现错误(即activation_code 不匹配),我会返回

render :xml => @user.errors, :status => :unprocessable_entity

所以显然任何带有activeresource的错误响应都必须由resue处理

rescue ActiveResource::ResourceInvalid

这一切都很好,很花哨,只是初始调用中的响应没有设置。我根本没有该响应的正文,因此永远不会返回@user.errors。我需要什么才能取回正确的对象?除了返回 200。任何“成功”响应代码都会很好地填充响应变量。但总是返回 200 似乎是一个错误。

4

1 回答 1

1

所以我有点误会了,在救援区

rescue ActiveResource::ResourceInvalid => e

e 被填充。服务返回

render :xml => @user.errors, :unprocessable_entity

所以 e.response.body 包含错误 xml。然后我在我的客户端只是说

user.errors.from_xml(e.response.body)

并且用户现在填充了正确的错误。

于 2009-05-08T16:05:49.070 回答