2017-05-30 1 views
0

Je suis confus sur la façon d'aborder cette approche. Je connecte des utilisateurs et des groupes via le modèle d'adhésion, mais je souhaite également que les utilisateurs puissent créer de nouveaux groupes. Il est clair qu'un groupe doit appartenir à un utilisateur, mais les groupes appartiennent également aux utilisateurs via la table des appartenances. Je l'ai dans mon fichier user.rb, mais je pense que c'est faux. Est-ce que je retire le premier et juste le traverser? Comment puis-je travailler dans le créateur du groupe dans ce cas?Rails has_many et has_many à travers

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

En d'autres termes, l'utilisateur est membre de plusieurs groupes, mais aussi créateur de nombreux groupes. La table d'appartenances a seulement deux colonnes (identifiant de groupe et identifiant d'utilisateur). L'identifiant de l'utilisateur dans cette colonne est utilisé pour stocker les utilisateurs qui sont membres de ce groupe. Je suis coincé sur ce qu'il faut faire à propos de l'utilisateur qui a créé le groupe.

Répondre

1

Vous devez avoir deux relations entre les groupes et les utilisateurs. L'une reflète le fait qu'un utilisateur a créé un groupe et l'autre qu'un utilisateur appartient à un groupe. Vous pouvez refléter cette idée en configurant la dénomination de vos relations. Vous devrez également ajouter un champ user_id à votre table Groups.

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

C'est ce que je cherchais, merci. – ddonche