J'ai un Release
modèle avec medium
et des country
colonnes (entre autres). Il ne devrait pas y avoir de releases
part identiques medium
/ country
combinaisons.
Comment pourrais-je écrire cela comme une validation de rails?
ruby-on-rails
ruby-on-rails-3
ruby-on-rails-4
activerecord
rails-activerecord
Jackson Cunningham
la source
la source
Réponses:
Vous pouvez utiliser une validation d' unicité avec l'
scope
option.De plus, vous devez ajouter un index unique à la base de données pour empêcher les nouveaux enregistrements de passer les validations lorsqu'ils sont vérifiés en même temps avant d'être écrits:
la source
unique
car il n'est pas reconnu. Pour cette partie, j'ai utilisé la réponse ci-dessous.uniqueness
, nonunique
. Voir la documentation liée. Fixer la réponse.Toutes les réponses ci-dessus ne permettent pas de valider l'unicité de plusieurs attributs dans un modèle. Le code ci-dessous a l'intention de dire comment utiliser plusieurs attributs dans une portée.
Il valide l'unicité de
country
dans toutes les lignes avec des valeurs demedium
etanother_medium
.Remarque: n'oubliez pas d'ajouter un index sur la colonne ci-dessus, cela assure une récupération rapide et ajoute une validation au niveau de la base de données pour les enregistrements uniques.
Mise à jour: pour ajouter un index lors de la création d'une table
la source
Vous pouvez passer un
:scope
paramètre à votre validateur comme ceci:Consultez la documentation pour plus d'exemples.
la source