2009-03-11 15 views
5

Ho una domanda riguardante le associazioni in Ruby on Rails. Nell'applicazione ci sono progetti, utenti, ruoli e gruppi. Il progetto appartiene a un gruppo con utenti, un utente può appartenere a molti gruppi diversi ma può avere solo un ruolo specifico all'interno di quel gruppo. Ad esempio:Triplo join in Ruby on Rails

In un gruppo l'utente è il proprietario del progetto, ma in un altro gruppo è uno scrittore.

Qual è il modo migliore per implementarlo utilizzando le funzioni integrate in Rails?

Grazie

risposta

8

Ecco una veloce serie di modelli che dovrebbero soddisfare le vostre esigenze:

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 

in fondo non c'è una tabella che ha unirsi a un utente, gruppo e il ruolo id in essa. Lascerò le migrazioni come esercizio per l'interrogante