我很难掌握Rails中的多态关联。我有两个模型,Group和User。
用户需要属于某个群组,但群组可以拥有多个用户且拥有多个群组。我需要我的团队就像一棵树,我认为Ancestry宝石应该有所帮助,但我还没有尝试过。
似乎我需要某种具有user_id和group_id的连接模型Membership。然后我可以做一个has_many:通过将用户与群组联系起来,但我怎么能让它拥有多个群组呢?会员资格会是多态模型吗?
谢谢!
安迪
答案 0 :(得分: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
答案 1 :(得分:2)
是的,你基本上得到了它。您的会员资格模型需要以下字段:
group_id
member_id
member_type
group_id是“成员”所属的组。 member_id将是Person或Group的id,member_type将是'Person'或'Group'。
会员资格具有以下关联:
class Member < ActiveRecord::Base
belongs_to :member, :polymorphic => true
end
然后您的用户和组类将具有类似
的内容has_many :memberships, :as => :member
答案 2 :(得分:2)
检查此链接:Rails model relationships。我发现它非常有助于确定导轨支持的各种关系。
编辑:固定网址。遗憾。
答案 3 :(得分:2)
我认为祖先是正确的答案。我使用了一个更老的,acts_as_tree,它很有帮助。现在开始一个新项目我会使用Ancestry。你可以在没有其他答案的情况下做到这一点,但你不会得到Ancestry给你的所有免费方法。