小编Mik*_*keB的帖子

如何在Rails中加入多角色,多组织表

我正在尝试找到一种对我来说并不那么明显的导轨设计的解决方案.一个对这些东西非常好的朋友给了我他的看法,但我想知道是否有一个铁轨模式 - 我缺少的知识是铁轨如何创造关系......

我有这样的问题空间.用户可以在多个组织中执行多个角色.因此,例如,用户可以是组织1的"标准用户"和"高级用户",但是组织2的"管理员".

我正在使用Devise和CanCan.我有一个Users表,Roles和一个Organizations表以及一个roles_users表来管理这种多对多关系.然后我有一个user_organisations表,它存储用户和组织之间的M2M.一切正常.当我这样做;

user = User.new({ :email => 'admin@example.com', 
:password => 'password', 
:password_confirmation => 'password', 
:firstname => 'TestFirstName',
:surname => 'TestSurName'})

org1 = Org.new({:fullname => 'Test Org 1'})
org1.save

org2 = Org.new({:fullname => 'Test Org 2'})
org2.save

user.org << Org.first
user.org << Org.last

user.roles << Role.where('name'=>'administrator').first
user.roles << Role.where('name'=>'PowerUser').first
Run Code Online (Sandbox Code Playgroud)

我得到(正如你所料)两个组织,并且两个用户都注册了.

缺少的是角色.我有一个新模型(使用通过赋值),roles_user_orgs,它是user_org表和角色之间的链接,并通过使用user_org的主键和角色id为用户存储角色.但它从未填充过.我不知道这是因为我没有正确地编写插入来填充它,或者因为我的关系不正确 - 或者 - 因为设计是完全错误的并且不能在rails中工作.simper模型是在user_roles表中使用org_id,但我不知道如何填充这个......

这是我的协会......

class Role

has_many :user_roles, :dependent => :destroy
has_many :users, :through => :user_roles, :uniq => true

has_many :role_user_orgs, :dependent => :destroy
has_many :user_orgs, …
Run Code Online (Sandbox Code Playgroud)

database ruby-on-rails devise cancan

2
推荐指数
1
解决办法
835
查看次数

标签 统计

cancan ×1

database ×1

devise ×1

ruby-on-rails ×1