2010-11-02 5 views
0

J'ai une forme qui est soumise via jQuery AJAX ...Rails AJAX erreur un message

Le modèle a un validates_presence_of pour un champ, si ce champ est vide, rails recrache sur XHR :role_idNot Defined.

I appris comment personnaliser cela en faisant:

validates_presence_of(:role_id, :message=> "Select a role to continue.") 

Mais cela crache en arrière: rôle role_IDSelecta pour continuer. Donc, j'ai trouvé ce qui pourrait aider, IDK encore:

<% errors.each do |attribute, message| -%> 
    <% if message.is_a?(String)%> 
     <li><%= message %></li> 
    <% end %> 
<% end -%> 

Ma question est de savoir comment puis-je gérer ce type de va et vient avec une forme à distance dans Rails 3? Je veux soumettre avec AJAX et en quelque sorte renvoyer le message d'erreur avec AJAX?

Des idées? Plugins?

Merci encore

Répondre

2

Eh bien ... ce n'est pas Rails qui est font le dos craché. C'est votre contrôleur. Ainsi, lorsque votre modèle échoue à la validation, vous pouvez cracher tout ce que vous voulez. Vous avez probablement une méthode create et une méthode de mise à jour, et chacune doit gérer XHR. Il est important que vous décidiez vous-même comment vous voulez communiquer avec le navigateur.

On pourrait arguer qu'une validation défaillante devrait créer une réponse d'erreur (4xx), mais c'est vraiment un HTTP, pas un code de réponse d'application. Dans ce cas, votre application a correctement géré la requête et doit donc renvoyer un 200. Le gestionnaire d'erreurs Ajax ne vous servira donc pas à grand-chose - pour les erreurs de type page non trouvée, serveur bloqué, etc. Au contraire, votre gestionnaire de succès doit examiner le hachage flash pour découvrir si des erreurs sont présentes, et si c'est le cas, placer le texte d'erreur dans un emplacement approprié sur la page pour votre utilisateur.

Un plugin qui semblait prometteur était Stickies (http://github.com/JokerCatz/stickies). Il n'y a pas eu d'activité sur le projet depuis un moment, mais si cela ne fonctionne pas avec votre version de Rails, il ne devrait pas être trop difficile de le fourrer et de l'amener aux niveaux actuels de Rails.