2017-05-30 2 views
0

Ich bin verwirrt, wie man sich diesem nähert. Ich verbinde Benutzer und Gruppen über das Mitgliedschaftsmodell, möchte aber auch, dass Benutzer neue Gruppen erstellen können. Natürlich muss eine Gruppe dann zu einem Benutzer gehören, aber die Gruppen gehören auch Benutzern über die Mitgliedschaftstabelle.Schienen has_many und has_many durch

Ich habe dies in meiner user.rb-Datei, aber ich fühle es ist falsch. Entferne ich den ersten und habe den durch? Wie arbeite ich in diesem Fall beim Ersteller der Gruppe?

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

Mit anderen Worten, ist der Benutzer Mitglied vielen Gruppen, aber auch die Schöpfer vielen Gruppen. Die Mitgliedschaftstabelle hat nur zwei Spalten (Gruppen-ID und Benutzer-ID). Die Benutzer-ID in dieser Spalte wird zum Speichern von Benutzern verwendet, die Mitglieder dieser Gruppe sind. Ich weiß nicht, was ich mit dem Benutzer machen soll, der die Gruppe erstellt hat.

Antwort

1

Sie sollten zwei Beziehungen zwischen Gruppen und Benutzern haben. Einer spiegelt die Tatsache wider, dass ein Benutzer eine Gruppe erstellt hat, und einer, der einem Benutzer zu einer Gruppe gehört. Sie können diese Idee widerspiegeln, indem Sie die Benennung Ihrer Beziehungen konfigurieren. Sie müssen der Tabelle "Groups" auch ein Feld "user_id" hinzufügen.

class User < ApplicationRecord 
    has_many :created_groups, class_name: "Group" 
    has_many :memberships 
    has_many :groups, through: :memberships 
end 

class Group < ApplicationRecord 
    belongs_to :creator, class_name: "User" 
    has_many :memberships 
    has_many :subscribers, through: :memberships, source: :user 
end 

class Membership < ApplicationRecord 
    belongs_to :user 
    belongs_to :group 
end 
+0

Dies ist, was ich gesucht habe, danke. – ddonche