2009-05-07 6 views
0

J'ai demandé quelque chose de semblable à cela avant et jamais eu de réponse, voici une version raccourcieActiveResource tête de réponse d'erreur ne retourne pas le corps

J'ai un modèle ActiveResource utilisateur. Je fais un simple appel sur mon client au service

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

En cas d'erreur sur le service (ie. Activation_code ne correspondait pas à) Je reviens

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

donc apparemment une réponse d'erreur avec ActiveResource doivent être traitées par un resue

rescue ActiveResource::ResourceInvalid 

C'est bien beau, sauf que la réponse à l'appel initial ne soit pas défini. Je n'ai aucun corps provenant de cette réponse, donc @ user.errors n'est jamais retourné. De quoi ai-je besoin pour récupérer l'objet approprié? En plus de renvoyer 200. Tout code de réponse «succès» remplit la variable de réponse fine. Mais toujours revenir 200 semble être une erreur.

Répondre

1

donc j'étais un peu trompé là-bas, dans le bloc de sauvetage

rescue ActiveResource::ResourceInvalid => e 

e se peuplé. Le service renvoie

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

Ainsi, e.response.body contient les erreurs xml. Je puis de mon côté client juste dire

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

et l'utilisateur est maintenant rempli avec les erreurs appropriées.