2010-06-06 5 views
1

Je me demandais comment procéder pour la validation de forme dans les rails. Plus précisément, voici ce que j'essaie de faire:validation de formulaire javascript dans les rails?

Le formulaire permet à l'utilisateur de sélectionner un élément dans un menu déroulant, puis entrez un nombre avec lui. En utilisant RJS, l'enregistrement apparaît instantanément dans un tableau sous le formulaire. Réinitialiser le formulaire avec AJAX n'est pas un problème. Le problème est, je ne veux pas que la personne puisse sélectionner le même article à partir de ce menu déroulant deux fois (en 1 jour au moins). Sans utiliser ajax, ce n'est pas un problème (car j'ai une fonction pour l'instruction select actuellement), mais maintenant que la page ne recharge pas, j'ai besoin d'un moyen de m'assurer que les gens ne peuvent pas ajouter deux fois le même article en une journée . Cela dit, existe-t-il un moyen d'utiliser une validation javascript/ajax pour s'assurer que le même enregistrement n'a pas été soumis pendant ce jour, avant qu'un duplicata puisse être créé?

Merci d'avance!

Elliot

Répondre

2

En ce qui concerne pour former des validations, pour votre logique spéciale, vous aurez envie de passer outre #validate dans votre modèle. Voir les documents pour ActiveRecord::Validations#validate. Le meilleur moyen de «s'assurer que les gens ne peuvent pas ajouter le même objet deux fois dans une même journée» est de ne pas présenter à l'utilisateur des options qu'il ne peut pas sélectionner. Lorsque votre contrôleur prépare des données pour la vue, utilisez une logique qui filtre toutes les options que l'utilisateur ne devrait pas avoir (c'est-à-dire celles qu'il a déjà sélectionnées ce jour-là). Ou présentez-les mais désactivez-les en tant qu'options (elles sont donc grisées). Si l'utilisateur peut sélectionner la même option deux fois dans une requête, vous voulez que certains JS effectuent une validation côté client avant un POST sur le serveur.

+0

Hey Chris, j'utilise ajax, donc la page n'est pas rafraîchissante. Cela signifie que la première fois qu'un enregistrement est ajouté, les options doivent être différentes la deuxième fois. Mais le contrôleur n'est pas accessible entre les deux. – Elliot

+0

Le contrôleur est accédé entre, il est juste en train de gérer une requête ajax. Votre modèle devrait gérer la validation aveC#validate. Si la validation échoue, votre contrôleur doit renvoyer une réponse ajax qui met à jour la vue avec un message d'erreur. Sinon, le contrôleur renvoie une liste de nouvelles options avec lesquelles vous pouvez mettre à jour la sélection de l'utilisateur. – Chris

Questions connexes