我很难掌握 Rails 中的多态关联。我有两个模型,组和用户。
一个用户需要属于一个组,但一个组可以拥有_many 个用户和拥有_many 个组。我需要我的团队像一棵树,我认为祖先宝石应该有所帮助,但我还没有尝试过。
似乎我需要某种具有 user_id 和 group_id 的加入模型 Membership。然后我可以做一个 has_many :through 来将用户与组联系起来,但是我怎样才能让它也有很多组呢?Membership 会是多态模型吗?
谢谢!
安迪
我很难掌握 Rails 中的多态关联。我有两个模型,组和用户。
一个用户需要属于一个组,但一个组可以拥有_many 个用户和拥有_many 个组。我需要我的团队像一棵树,我认为祖先宝石应该有所帮助,但我还没有尝试过。
似乎我需要某种具有 user_id 和 group_id 的加入模型 Membership。然后我可以做一个 has_many :through 来将用户与组联系起来,但是我怎样才能让它也有很多组呢?Membership 会是多态模型吗?
谢谢!
安迪
这不是多态关联。多态关联是一种超越类类型的关联,例如属于人和狗类的图像类。
您正在谈论单表继承,其中组可以属于另一个组并具有其他组。像下面这样的东西就是你要找的东西。
这只是空气代码,可能需要一些调整
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
是的,你基本上明白了。您的会员模型将需要以下字段:
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
我认为祖先是正确的答案。我使用了一个更老的acts_as_tree,它很有帮助。现在开始一个新项目,我会使用 Ancestry。正如其他答案所建议的那样,您可以不这样做,但您不会获得 Ancestry 为您提供的所有免费方法。