Rails STI样式继承每个用户的多个角色

时间:2009-08-28 01:14:11

标签: ruby-on-rails sti

我一直在阅读Rails的一些STI继承示例, 虽然看起来它符合我的需求(用户角色/类型继承自用户的基类)。似乎它不能很好地处理具有多个角色的用户。特别是因为它依赖于数据库中的类型字段。

是否可以快速轻松地解决这个问题?

3 个答案:

答案 0 :(得分:3)

我不确定STI是否是用户角色/用户场景中的正确解决方案 - 我不认为用户角色/类型是特定形式的用户。我会有以下架构:

class Membership < ActiveRecord::Base
  belongs_to :user     # foreign key - user_id
  belongs_to :role     # foreign key - role_id
end
class User < ActiveRecord::Base
  has_many :memberships
  has_many :roles, :through => :membership
end
class Role < ActiveRecord::Base
  has_many :memberships
  has_many :users, :through => :membership
end

另一种方法是使用has_and_belongs_to_many。您可能还想查看restful_authentication插件。

答案 1 :(得分:1)

对于您的问题,一个很好的解决方法可能是easy_roles gem。你可以在github上找到它。  正如其他人已经说过STI不是你实现你的东西的方式。

答案 2 :(得分:0)

就像Andy所说,has_and_belongs_to_many是另一种方法。

# user.rb
class User < ActiveRecord::Base
  has_and_belongs_to_many :roles
end

# role.rb
class Role < ActiveRecord::Base
  has_and_belongs_to_many :users
end

注意:您仍然需要数据库中的关联表,但它只是隐藏在您的模型中。