2011-08-02 2 views
3

Disons que j'ai cet index unique sur une table:Une bonne façon de valider uniqueness_of pour plusieurs colonnes

add_index :events, [:venue_id, :act_id, :occurs_on], :unique => true 

Maintenant, si je veux valider ce dans le modèle, dois-je faire ceci:

validates_uniqueness_of :venue_id, :scope => [:act_id, :occurs_on] 

ou ceci:

validates_uniqueness_of :venue_id, :scope => [:act_id, :occurs_on] 
validates_uniqueness_of :act_id, :scope => [:venue_id, :occurs_on] 
validates_uniqueness_of :occurs_on, :scope => [:venue_id, :act_id] 
+0

Votre deuxième instruction est l'équivalent de "donné un particulier: act_id et: happens_on,: lieu_id devrait être unique". Dans l'ordre, il est en fait moins strict que «validates_uniqueness_of: place_id», car il permet des événements avec le même «: lieu_destin» tant que les deux autres colonnes ne sont pas identiques. – Karl

Répondre

3

Votre première contrainte d'unicité se traduit par « Il ne peut être l'un des tout venue_ particulier id, act_id et happens_on tuple dans la table. " Par conséquent, seule la première déclaration de validation devrait être nécessaire.

Questions connexes