Damien Mathieu

Blog d’un développeur web

Rails : ajouter une erreur de validation

novembre2

Vous le savez probablement déjà (sinon, je ne peux que vous conseiller de voir les bases de Ruby on Rails) comment il est facile de valider des données avec notre framework préféré :)

if mesDonnees.save
#Les données ont bien été sauvegardées
else
# Il y a une erreur. mesDonnees.errors la contient il n'y a plus qu'à l'afficher.
end

Après, il n’y a plus qu’à ajouter des paramètres de validation des données dans le modèle.
Mais maintenant, supposons d’autres cas de validation un peu particuliers, qui ne rentrent pas dans le cas “normal”.

Vous n’avez qu’à créer une nouvelle méthode qui valide vos données (l’exemple ci-dessous est totalement bidon) :

def validates_roxitude(*attribut)
reg = Regexp.new '/^ruby(.*?)rox$/'
self.errors.add('rox', 'Hey, Ruby ça rox. Faut le dire !') unless reg.match attribut
end

Ici, nous mettons donc une erreur sauf si le champ “monChamp” commence par ruby et se termine par rox.

Il n’y a plus qu’à forcer la validation avec cette méthode et le tour est joué !
class monModel < ActiveRecord::Base
validates_roxitude :monChamp
end

posted under Rails
3 Comments to

“Rails : ajouter une erreur de validation”

  1. On novembre 12th, 2008 at 13:49 Pada Says:

    Ta méthode “validates_roxitude” est ajoutée dans ta classe “monModel”, ou ailleurs ?

    Personnellement, je fais plutôt un truc de ce genre dans mes modèles, je donne un exemple pour un module de polling :

    validate :ensure_blah

    def ensure_blah

    end

    Tu penses qu’il y a une pratique meilleure que l’autre ?

  2. On novembre 12th, 2008 at 13:50 Pada Says:

    (oops, non, cet exemple n’est pas lié au module de polling. Ca m’apprendra à éditer/effacer/modifier trop rapidement)

  3. On novembre 12th, 2008 at 13:51 Damien Says:

    mon validates_roxitude va dans le modèle. Donc dans la classe monModel.

    Ta méthode est tout aussi valide que la mienne ;)

Email will not be published

Website example

Your Comment:

 

Rss Feeds

En Français
In English