有没有办法在rails / activerecord中有三种habtm关联?

时间:2010-05-10 18:29:23

标签: ruby-on-rails orm activerecord

habtm关联通常需要三个(或更多)方式关联。例如,具有角色的权限模型。

一个特定的功能区域有许多用户可以访问许多区域。

该区域的权限是通过角色(habtm)设置的

用户/角色关联也是habtm

权限(读,写,删除等)是对角色的苛刻。

使用rails / activerecord最好如何做到这一点?

2 个答案:

答案 0 :(得分:2)

我不确定您是仅仅使用基于角色的用户权限作为示例,还是实际上是您的目标。

嵌套habtm 关系在Rails中很容易,但我强烈推荐嵌套has_many :through ,只需按照您的想象设置它们:

class Permission < ActiveRecord::Base
end

#this table must have permission_id and role_id 
class PermissionAssignment < ActiveRecord::Base
  belongs_to :permission
  belongs_to :role
end

class Role < ActiveRecord::Base
  has_many :users, :through => :role_assignments
  has_many :permissions, :through => :permission_assignments
end

#this table must have user_id and role_id     
class RoleAssignment < ActiveRecord::Base
  belongs_to :role
  belongs_to :user
end

class User < ActiveRecord::Base
  has_many :roles, :through => :role_assignments
end

答案 1 :(得分:1)

This question about rails and RBAC(基于角色的身份验证控件)有一堆有用的示例,它们提供了这个问题的答案,并提供了示例的示例。