在用户模型中
class User < ActiveRecord::Base
has_many :my_groups,
:class_name => "Group",
:foreign_key => :creator_id
has_and_belongs_to_many :controlled_groups,
:class_name => "Group",
:join_table => :admins_groups
has_and_belongs_to_many :joined_groups,
:class_name => "Group",
:join_table => :groups_members
end
在组模型中
class Group < ActiveRecord::Base
belongs_to :creator, :class_name => "User"
has_and_belongs_to_many :admins,
:class_name => "User",
:join_table => :admins_groups
has_and_belongs_to_many :members,
:class_name => "User",
:join_table => :groups_members
end
迁移
# migration to create join table for admins and groups
def change
create_table :admins_groups, :id => false do |t|
t.integer :user_id
t.integer :group_id
end
end
# migration to create join table for members and groups
def change
create_table :groups_members, :id => false do |t|
t.integer :user_id
t.integer :group_id
end
end
# in migration where you create groups table
def change
create_table :groups do |t|
# .... all other fields
t.integer :creator_id # id for group creator
t.timestamps
end
end