Triple rejoindre dans Ruby on Rails
-
10-07-2019 - |
Question
J'ai une question concernant les associations dans Ruby on Rails. Dans l'application, il y a des projets, des utilisateurs, des rôles et des groupes. Le projet appartient à un groupe d'utilisateurs, un utilisateur peut appartenir à de nombreux groupes différents mais ne peut avoir qu'un rôle spécifique au sein de ce groupe. Par exemple:
Dans un groupe, l'utilisateur est le propriétaire du projet, mais dans un autre groupe, il est un écrivain.
Quel est le meilleur moyen d'implémenter cela en utilisant les fonctions intégrées dans Rails?
Merci
La solution
Voici un ensemble très rapide de modèles qui devraient répondre à vos exigences:
class User < ActiveRecord::Base
has_many :group_memberships
has_many :groups, :through => :group_memberships
end
class GroupMembership < ActiveRecord::Base
belongs_to :user
belongs_to :role
belongs_to :group
end
class Role < ActiveRecord::Base
has_many :group_memberships
end
class Group < ActiveRecord::Base
has_many :group_memberships
has_many :users, :through > :group_memberships
end
En gros, il existe une table de jointure comportant un identifiant d'utilisateur, de groupe et de rôle. Je vais laisser les migrations comme un exercice pour le questionneur