2015-12-23 1 views
0

Cela peut être une question très, mais j'essaye d'autoriser seulement des enregistrements uniques pour une table appelée "Favoris" avec les attributs "lightbulb_id" et "Carte d'étudiant." Je sais modèle validations Ruby on Rails - valider un enregistrement unique, pas seulement des attributs uniques d'un enregistrement

class Person < ActiveRecord::Base 
    validates_uniqueness_of :user_name 
end 

Mais, je veux valider l'unicité de l'ensemble du dossier (de sorte que la combinaison de lightbulb_id et student_id). Ainsi, lightbulb_id et student_id peuvent être dupliqués (un étudiant peut "favori" plusieurs lightbulb_id's) et par conséquent le même id_étudiant peut apparaître plusieurs fois dans la table Favoris avec différents lightbulb_ids. Mais la combinaison spécifique ne devrait pas être dupliquée (un étudiant ne peut pas préférer une ampoule deux fois)

Cela pourrait être une question très basique, toutes les suggestions seraient appréciées. Merci.

Répondre

1

Vous pouvez essayer de suivre la règle de validation:

validates_uniqueness_of :student_id, scope: [:lightbulb_id] 
+1

valident: lightbulb_id, unicité: {portée:: student_id} J'ai essayé et a ajouté un index unique sur mes Favoris table et il semble fonctionner. Je ne suis pas entièrement sûr de la manière dont la spécification de la portée fonctionne. Vérifie-t-elle l'unicité du student_id et de l'attribut spécifié dans la portée combinée? – anishasri