Rails 3: Valider valeurs combinées
Question
Dans 2.x Rails vous pouvez utiliser pour vous assurer que les validations vous avez une valeur combinée unique comme ceci:
validates_uniqueness_of :husband, :scope => :wife
Dans la migration correspondante pourrait ressembler à ceci:
add_index :family, [:husband, :wife], :unique => true
veillerait la combinaison mari / femme est unique dans la base de données. Maintenant, dans Rails 3 la syntaxe de validation a changé et l'attribut scope semble être disparu. Il ressemble maintenant à:
validates :husband, :presence => true
Toute idée comment je peux obtenir la validation combinée dans Rails 3? Les Rails 2.x travaillent encore dans des validations Rails 3 donc je peux toujours utiliser le premier exemple, mais il semble si « vieux », y at-il de meilleures façons?
La solution
Ours avec moi. La façon dont la méthode fonctionne Validation ActiveModel est de chercher un validateur.
:presence => true
cherche PresenceValidator
et passe les options. true
au initialiseur du validateur
Je pense que vous voulez
validates :husband, :presence => true, :uniqueness => {:scope => :wife}
(Le validateur unique est en fait une partie de ActiveRecord, pas ActiveModel. Il est vraiment intéressant de voir comment les développeurs configurer cela. Il est tout à fait élégante.)