2008-11-19 8 views
1

Dans mon application Ruby on Rails, j'ai une table User et une table Foo. J'ai également une table User_Foo qui stocke les données de référence croisée.RoR: Comment m'assurer qu'un seul objet est assigné à mon objet?

J'ai tout câblé pour que mes vues fonctionnent comme je veux, cependant, maintenant je dois m'assurer que le même Foo ne soit pas assigné à mon utilisateur plus d'une fois.

Quelle est la meilleure façon de faire cela?

J'ai supposé que je pouvais utiliser validates_uniqueness_of dans mon modèle, mais cela ne serait pas spécifique à un seul utilisateur. Ai-je besoin de faire cela sur la mise à jour? J'espérais avoir un "Ruby Way" intégré.

Répondre

7

validates_uniqueness_of le couvre, il vous suffit d'ajouter une option supplémentaire pour obtenir le comportement souhaité.

En supposant que vous avez un modèle UserFoo pour stocker la relation de référence croisée (et ne le faites pas sans modèle). La validation suivante n'autorisera pas les liens foo-user en double.

class UserFoo < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :foo 
    validates_uniqueness_of :foo_id, :scope => :user_id 
+0

génial. C'est exactement ce que je cherchais. –

Questions connexes