J'ai une relation parent/enfant via notre table d'utilisateurs, avec des modèles en tant que tels:Façon correcte de forcer l'unicité sur un modèle de jointure? (Has_many: par)
class User < ActiveRecord::Base
# Parents relationship
has_many :children_parents, :class_name => "ParentsChild", :foreign_key => "child_id", :dependent => :destroy
has_many :parents, :through => :children_parents
# Children relatiopnship
has_many :parents_children, :class_name => "ParentsChild", :foreign_key => "parent_id", :dependent => :destroy
has_many :children, :through => :parents_children
...
end
Et parents_child.rb:
class ParentsChild < ActiveRecord::Base
belongs_to :parent, :class_name => "User"
belongs_to :child, :class_name => "User"
end
En ce moment, il est possible dans notre formulaire "ajouter des enfants" (en utilisant juste les attributs imbriqués de vanille) pour ajouter le même utilisateur comme un enfant plusieurs fois pour les parents. Je ne suis pas sûr de la «bonne» façon de forcer l'unicité dans la relation ParentsChild, bien que je penche vers un index unique sur la couche (parent_id, child_id)
de base de données (en utilisant une migration bien sûr). Je suis sûr que je pourrais aussi appliquer des contraintes d'unicité dans la méthode UsersController :: update, mais je préférerais éviter de changer ce code (pour l'instant, il ne référence pas du tout les parents/enfants, grâce aux attributs imbriqués dans le formulaire/modèle) si possible. Je suis le plus soucieux de m'assurer que nous utilisons la solution "appropriée". Quelle est la bonne façon de faire cela?
Certainement aurait dû examiner la solution la plus simple possible d'abord. Merci! –
Oui! Je passe tellement de temps avec ça, ta réponse était exactement ce dont j'avais besoin. – Matthew
ou dans les rails 4, 'has_many: parents, -> {uniq},: through =>: children_parents' – courtsimas