我正在试图弄清楚如何为我的应用程序建模群组和用户,而我在找出正确的方法时遇到了麻烦。
我有用户,而且我有管理员。我还没有团体模型。我希望一个群组能够拥有多个用户,并且用户可以拥有多个群组。为了使事情进一步复杂化,组可以通过其他组拥有多个用户。
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
我想我需要一张会员桌。然后,每个用户将通过成员身份连接到一个组。但是,我怎么能连接组 - >群组 - >用户?
class Membership
?
end
答案 0 :(得分:0)
这里有几个指针。
belongs_to_many
不是一件事,至少是我熟悉的最新版本。也许你的意思是has_and_belongs_to_many
或者has_many :groups, through: :memberships
。我将在下面使用后一种形式。
要使用through :groups
类中的Group
选项,首先需要定义:groups
关联。如果您要尝试将其定义为与Group
同时具有User
成员的任何其他Group
,那么您可以轻松地执行此操作:
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
您可能希望将此关联重命名为不那么令人困惑:
has_many :connected_groups, through: :users, source: :groups
现在,您要在users
上定义另一个 Group
关联,该关联代表任何连接组的用户。您需要一个不同的名称,您无法有意义地定义两个同名的关联(您将如何访问一个与另一个?)。所以我建议使用名称connected_groups
和connected_users
,或类似的东西:
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