2

我很难掌握 Rails 中的多态关联。我有两个模型,组和用户。

一个用户需要属于一个组,但一个组可以拥有_many 个用户和拥有_many 个组。我需要我的团队像一棵树,我认为祖先宝石应该有所帮助,但我还没有尝试过。

似乎我需要某种具有 user_id 和 group_id 的加入模型 Membership。然后我可以做一个 has_many :through 来将用户与组联系起来,但是我怎样才能让它也有很多组呢?Membership 会是多态模型吗?

谢谢!

安迪

4

3 回答 3

4

这不是多态关联。多态关联是一种超越类类型的关联,例如属于人和狗类的图像类。

您正在谈论单表继承,其中组可以属于另一个组并具有其他组。像下面这样的东西就是你要找的东西。

这只是空气代码,可能需要一些调整

class User
  belongs_to :group
end

class Group
  has_many :users
  has_many :sub_groups, :class => "Group", :foreign_key => :parent_group_id
  belongs_to :parent_group, :class => "Group", :foreign_key => :parent_group_id
end
于 2011-05-18T14:12:42.147 回答
2

是的,你基本上明白了。您的会员模型将需要以下字段:

group_id
member_id
member_type

group_id 是“成员”所属的组。member_id 将是个人或组的 id,而 member_type 将是“个人”或“组”。

成员资格将具有以下关联:

class Member < ActiveRecord::Base
  belongs_to :member, :polymorphic => true
end

然后你的用户和组类会有类似的东西

has_many :memberships, :as => :member
于 2011-05-18T14:13:00.353 回答
2

我认为祖先是正确的答案。我使用了一个更老的acts_as_tree,它很有帮助。现在开始一个新项目,我会使用 Ancestry。正如其他答案所建议的那样,您可以不这样做,但您不会获得 Ancestry 为您提供的所有免费方法。

于 2011-05-18T15:31:24.490 回答