繁体   English   中英

Rails多态协会

[英]Rails Polymorphic Association

我在抓住Rails中的多态关联时遇到了困难。 我有两个模型,Group和User。

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

好像我需要某种具有user_id和group_id的连接模型,Membership。 然后我可以做一个has_many:通过将用户与群组联系起来,但我怎么能让它拥有多个群组呢? 会员资格会是多态模型吗?

谢谢!

安迪

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

您正在谈论单表继承,其中组可以属于另一个组并具有其他组。 以下是您正在寻找的东西。

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

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将是Person或Group的id,member_type将是'Person'或'Group'。

会员资格如下:

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

那么你的用户和组类就会有类似的东西

has_many :memberships, :as => :member

检查此链接: Rails模型关系 我发现它非常有助于确定导轨支持的各种关系。

编辑:固定的URL。 抱歉。

我认为祖先是正确的答案。 我使用了一个更老的,acts_as_tree,它很有帮助。 现在开始一个新项目我会使用Ancestry。 你可以在没有其他答案的情况下做到这一点,但你不会得到Ancestry给你的所有免费方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM