我在Rails中很难掌握多态关联。我有两个模型,组和用户。Rails多态协会
用户需要属于一个组,但一个组可以拥有_many个用户和have_many组。我需要我的团队像一棵树,我认为祖先的宝石应该有所帮助,但我还没有尝试过。
好像我需要某种加入模型,Membership,拥有user_id和group_id。然后,我可以做一个has_many:通过将用户与群组关联起来,但是如何让它拥有多个群组?会员资格是多态模型吗?
谢谢!
Andy
我在Rails中很难掌握多态关联。我有两个模型,组和用户。Rails多态协会
用户需要属于一个组,但一个组可以拥有_many个用户和have_many组。我需要我的团队像一棵树,我认为祖先的宝石应该有所帮助,但我还没有尝试过。
好像我需要某种加入模型,Membership,拥有user_id和group_id。然后,我可以做一个has_many:通过将用户与群组关联起来,但是如何让它拥有多个群组?会员资格是多态模型吗?
谢谢!
Andy
这不是多态关联。多态关联是超越类类型的关联,例如属于人类和狗类的图像类。
您正在讨论Single Table Inheritance,其中组可以属于另一个组并具有其他组。类似下面的内容就是你要找的东西。
这仅仅是空气的代码,可能需要一些调整
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
ErsatzRyan确实有一个有效的观点,会员与Group *以及*属于Group有多态关联是奇怪的。但我仍然认为这是一个有效的多态用例。 – bioneuralnet 2011-05-18 14:19:14
感谢bioneuralnet,看起来我还有点学习,哈哈。我不确定采取哪种方法。我并没有真正遵循处理外键的代码行,所以我会做一些研究。 – ardavis 2011-05-18 14:23:23
这两种方法都应该有效。您想要显示,循环浏览,编辑等数据将决定哪个更适合。 – bioneuralnet 2011-05-18 14:33:47
检查此链接了:Rails model relationships。我发现它非常有助于确定轻松支持的各种关系。
编辑:固定的URL。抱歉。
我认为Ancestry是正确的答案。我已经使用了一个更老的,acts_as_tree,这是有帮助的。现在开始一个新项目,我会使用Ancestry。你可以在没有其他答案的情况下做到这一点,但你不会得到Ancestry给你的所有自由方法。
作为一个有点新的Rails开发人员,我没有关注外键的问题。你能详细阐述一下吗?或提供一个链接到我可以了解更多关于他们的地方? – ardavis 2011-05-18 14:21:46
[http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html](http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html) – ErsatzRyan 2011-05-18 14:23:53
现在,不是'祖先'宝石为你做这个? https://github.com/stefankroes/ancestry – ardavis 2011-05-18 14:34:18