2009-03-11 7 views
5

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 avec des 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:Triple rejoindre Ruby on Rails

Dans un groupe, l'utilisateur est le propriétaire du projet, mais dans un autre groupe, il est un rédacteur.

Quelle est la meilleure façon de l'implémenter en utilisant les fonctions intégrées dans Rails?

Merci

Répondre

8

Voici un ensemble très rapide de modèles qui devraient répondre à vos besoins:

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 

Fondamentalement, il y a une table de jointure qui a un utilisateur, groupe et id rôle. Je vais laisser les migrations comme exercice pour le questionneur