Rails组模型,可以拥有可以拥有用户的组

时间:2016-05-11 18:01:42

标签: ruby-on-rails

我正在试图弄清楚如何为我的应用程序建模群组和用户,而我在找出正确的方法时遇到了麻烦。

我有用户,而且我有管理员。我还没有团体模型。我希望一个群组能够拥有多个用户,并且用户可以拥有多个群组。为了使事情进一步复杂化,组可以通过其他组拥有多个用户。

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

1 个答案:

答案 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_groupsconnected_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