开发者

Rails Polymorphic Association

I'm having a difficult time grasping polymorphic associations in Rails. I have two models, Group and User.

A User needs to belong to a group, but a Group can have_many users AND have_many groups. I need my groups to be like a tree, which I think the Ancestry gem should help, but I haven't tried yet.

Seems lik开发者_如何转开发e I would need some kind of join model, Membership, that has a user_id and a group_id. Then I could do a has_many :through to relate users to groups, but how would I get it to have many groups as well? Would the Membership be the polymorphic model?

Thanks!

Andy


This is not a polymorphic association. A polymorphic association is an association that transcends class types, such as a image class belonging to people and dogs class.

You are talking about Single Table Inheritance where Groups can belong to another group and have other groups. Something like what is below is what you are looking for.

This is just air code, might need some tweaks

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


Yes, you've basically got it. Your Membership model would need the following fields:

group_id
member_id
member_type

group_id is the Group the "member" belongs to. member_id would be the id of a Person or Group, and member_type would be 'Person' or 'Group'.

Membership would have the following association:

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

Then your User and Group classes would have something like

has_many :memberships, :as => :member


I think Ancestry is the right answer. I've used a much older one, acts_as_tree, and it was helpful. Starting a new project now I'd use Ancestry. You can do it without that as other answers have suggested but you won't get all the free methods Ancestry gives you.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜