Rails: valider l’unicité de deux colonnes (ensemble)

J’ai un modèle de Release avec medium colonnes medium et country (entre autres). Il ne devrait pas y avoir de releases partageant medium combinaisons de medium / country identiques.

Comment pourrais-je écrire ceci comme une validation de rails?

Vous pouvez utiliser une validation d’ unicité avec l’option scope .

En outre, vous devez append un index unique à la firebase database pour empêcher les nouveaux enregistrements de passer les validations lorsqu’ils sont cochés en même temps avant d’être écrits:

 class AddUniqueIndexToReleases < ActiveRecord::Migration def change add_index :releases, [:country, :medium], unique: true end end class Release < ActiveRecord::Base validates :country, uniqueness: { scope: :medium } end 

Toutes les réponses ci-dessus manquent pour valider l’unicité de plusieurs atsortingbuts dans un modèle. Le code ci-dessous indique comment utiliser plusieurs atsortingbuts dans une scope.

 validates :country, uniqueness: { scope: [:medium, :another_medium] } 

Il valide l’unicité du country dans toutes les lignes avec des valeurs de medium et another_medium .

Remarque: N’oubliez pas d’append un index dans la colonne ci-dessus, cela garantit une récupération rapide et ajoute une validation au niveau de la firebase database pour les enregistrements uniques.

Vous pouvez passer un paramètre :scope à votre validateur comme ceci:

 validates_uniqueness_of :medium, scope: :country 

Voir la documentation pour plus d’exemples.