.valid? et .errors

Rails utilise la méthode .valid? pour savoir si un objet est valide ou pas.

class Person < ActiveRecord::Base
    validates_presence_of :name
end
Person.create(:name => "Jean Paul").valid? # => true
Person.create(:name => nil).valid? # => false

Ma classe Person nécessiste pour validation la présence du nom. Si ce dernier est vide ou égal à nil, l’objet correspondant est non valide. Bien sûr, cette méthode .valid? n’est pas utilisée par moi-même. C’est Rails qui l’utilise implicitement lorsqu’il essaye d’enregistrer un élément dans la bdd.

Quand ActiveRecord pratique des validations, je peux voir quelles erreurs existent en utlisant la méthode .errors qui renvoie une collection d’erreurs. Si cette collection est vide, alors l’objet est valide et il peut être enregistré dans la bdd.

>> p.errors
=> #<ActiveRecord::Errors..., @errors={"name"=>["can't be blank"]}>

Aides prédéfinies à la validation (ou helpers)

Rails intègre plusieurs types de validation, variés et faciles à mettre en place, que l’on peut customiser avec des paramètres. Ca ressemble à :

class Person < ActiveRecord::Base
    validates_presence_of :name
end

Je pense que les plus utilisées sont :

validates_presence_of # vérifie la présence d'un objet. Par exemple, je ne veux pas enregistrer d'album dans ma bdd sans le nom de l'artiste.
validates_uniqueness_of # vérifie l'unicité d'un objet. Par exemple, je ne veux pas avoir deux fois le même album dans ma discographie.
validates_inclusion_of # vérifie que l'objet est compris entre telle et telle valeur (1950 et 2010 pour l'année de l'album par exemple)
validates_length_of # véirifie qu'un objet a une taille particulière, par exemple un mot de passe qui doit faire minimum 6 caractères

Valeurs par défaut

Chacun aide prédéfinie (ou helper) à la validation a 2 valeurs par défaut pour 2 de ses options :

  • option :o n : définit le moment où la validation se fait. Par défaut c’est :save mais on peut aussi mettre :create ou :update
  • option :message : c’est le message qui apparaît à l’utilisateur lorsqu’une erreur survient. Chaque helper a son message par défaut. Par exemple, le message par défaut pour validates_presence_of est can’t be empty. Si on veut changer ce message par défaut, il suffit de définir l’option :message => "ne peut être vide bordel!"