2016-05-11 4 views
0

Ich versuche herauszufinden, wie Gruppen und Benutzer für meine App modelliert werden, und ich habe Probleme, den richtigen Weg zu finden, es zu tun.Rails-Gruppenmodell, das Gruppen besitzen kann, die Benutzer besitzen können

Ich habe Benutzer, und ich habe Admins. Ich habe noch kein Modell für Gruppen. Ich möchte, dass eine Gruppe mehrere Benutzer besitzen kann und Benutzer mehrere Gruppen haben können. Um die Dinge noch weiter zu komplizieren, könnten Gruppen mehrere Benutzer durch andere Gruppen haben.

class Group 
    belongs_to :admin 
    has_many :users 
    has_many :users, through: :groups 
end 


class User 
    belongs_to_many :groups 
end 

class Admin 
    has_many :groups 
end 

Ich denke, ich brauche eine Mitgliedschaft Tabelle. Dann wäre jeder Benutzer durch eine Mitgliedschaft mit einer Gruppe verbunden. Aber wie könnte ich dann Gruppen -> Gruppen -> Benutzer verbinden?

class Membership 
    ? 
end 

Antwort

0

Ein Paar Zeiger hier.

belongs_to_many ist keine Sache, zumindest als die neueste Version, die ich kenne. Vielleicht meinst du has_and_belongs_to_many oder wahrscheinlich has_many :groups, through: :memberships. Ich werde dieses Formular unten verwenden.

Um die Option through :groups in der Klasse Group zu verwenden, müssen Sie zunächst eine :groups Zuordnung definieren. Wenn alles, was Sie versuchen, es zu definieren, wie jede andere Group ist, die eine User hat, der ein Mitglied sowohl das ist und diese Group, dann können Sie dies ganz einfach:

class Membership 
    belongs_to :user 
    belongs_to :group 
end 

class User 
    has_many :memberships 
    has_many :groups, through: :memberships 
end 

class Group 
    has_many :memberships 
    has_many :users, through: :memberships 
    has_many :groups, through: :users 
end 

Sie können diese Zuordnung umbenennen möchten sein etwas weniger verwirrend:

has_many :connected_groups, through: :users, source: :groups 

Jetzt Sie andereusers Verein auf Group definieren möchten, dass die Nutzer von jedem angeschlossenen Gruppe darstellt. Sie benötigen einen anderen Namen, Sie können zwei Assoziationen mit demselben Namen nicht sinnvoll definieren (wie würden Sie auf eine gegenüber der anderen zugreifen?). So würde ich vorschlagen, die Namen connected_groups und connected_users oder etwas ähnliches zu verwenden:

class Group 
    has_many :memberships 
    has_many :users, through: :memberships 
    has_many :connected_groups, through: :users, source: :groups 
    has_many :connected_users, through: connected_groups, source: :users 
end 
Verwandte Themen