J'imaginais plutôt des classes spécifiques sur les champs, générées
via introspection par exemple avec l'aide de formtastic, qui
permettent de déclencher des validateurs JS locaux, typiquement un
class="required" et un jquery-validator qui fait le boulot.
Moins coûteux que de l'appel ajax ?

2009/10/19 Michel Belleville <[email protected]>:
> 2009/10/19 Emilien Taque <[email protected]>
>>
>> Ca doit se faire de brancher un validateur JS basé sur les validates_
>> des modèles avec un peu d'introspection, quelqu'un a déjà fait ça ?
>>
>
> J'ai pas arrêté de faire des trucs comme ça avant de connaître Rails, en
> général c'est assez chiant à bien faire parce qu'il vaut mieux éviter de
> trop charger la mule question requêtes AJAX dans le vent et que ça oblige de
> faire dans les contrôleurs une méthode de sauvegarde à blanc juste pour
> tester si les champs sont corrects (qui peut être simplement un paramètre de
> plus que va attraper la méthode create / update), des calls AJAX déclenchés
> à chaque modification d'un champ du formulaire qui reçoivent la réponse,
> listent les champs erronés dans la réponse et agissent en conséquence dans
> la page. C'est pas infaisable si tu organise bien tes formulaires et si tu
> fais bien tes validations dans tes modèles, mais dans la plupart des cas
> c'est pas forcément beaucoup plus ergonomiques que de vérifier les grosses
> erreurs évidentes sans AJAX (champs vides, champs numériques avec des
> lettres, etc.), d'envoyer le formulaire en AJAX pendant la soumission et
> afficher le résultat de la validation quand elle est négative si ça passe
> pas.
>
> Ceci dit si c'est une demande ferme de tes utilisateurs ça peut être
> intéressant de faire quelque chose de composite, du genre :
>
> ne surveiller que les champs "à risque" (par exemple en leur mettant une
> classe "validated" ; pour éviter de trop se répéter, tu peux ouvrir les
> helpers de formulaire de Rails, leur filer un peu d'introspection pour
> savoir s'il y a des validate sur ce champs dans le model et leur faire avoir
> la classe validated quand c'est le cas)
> quand un champs surveillé est modifié, call AJAX sur la cible du formulaire
> en ajoutant un paramètre "validation" pour dire que c'est à blanc (en
> mettant toujours le même paramètre "validation", tu peux ne faire qu'un seul
> callback sur tous les champs qui ont "validated", chopper l'url sur laquelle
> pointe ton form, sérialiser le contenu du form pour faire ta requête et
> ajouter le paramètre "validation" dans la foulée pour faire ton call AJAX)
> le contrôleur reçoit "validation", il lance un create / update dans une
> transaction (et si ça passe il rollback ; toujours pour ne pas te répéter,
> tu peux donner faire des méthodes blank_create et blank_update à
> ActiveRecord::Base qui vont faire un create / update dans une transaction et
> toujours faire rollback derrière en renvoyant l'objet avec ses erreurs de
> validation) ; il renvoie un statut 200 si tout va bien, sinon il renvoie un
> statut 4xx pour dire qu'il y a une erreur dans les paramètres accompagné
> d'une liste json des erreurs de validation (mappé nom_du_champs: "texte
> d'erreur" par exemple)
> un callback sur la méthode AJAX choppe les erreurs de validation dans le
> json, lit le nom des champs, trouve les champs dans le formulaire, les
> encadre en rouge (etc.) et ajoute le texte d'erreur dans un span avec une
> class qui dit "error" (de nouveau si tu t'es bien débrouillé pour faire une
> mécanique standard la méthode JavaScript qui fait ça devrait être assez
> facile)
>
> Au final ça peut sembler gros et complexe mais ça ne l'est pas tant que ça
> si tu pense bien réutilisable dès le début. Par contre si tu commence une
> méthode comme ça en artisanal sur juste un modèle en faisant pas propre dès
> le début, il faut t'attendre à ce qu'on te demande de généraliser, et dans
> ce cas tu t'en mordras très probablement les doigts de ne pas avoir fait
> réutilisable dès le début...
>
> Dans tous les cas, ça ne doit en aucun cas remplacer un traitement
> harmonieux et strict des validations "à la papa" (c'est à dire lors de la
> "vrai" requête de sauvegarde).
>
> Michel Belleville
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse 
[email protected]
-~----------~----~----~----~------~----~------~--~---

Répondre à