我一直在阅读Rails的一些STI继承示例, 虽然看起来它符合我的需求(用户角色/类型继承自用户的基类)。似乎它不能很好地处理具有多个角色的用户。特别是因为它依赖于数据库中的类型字段。
是否可以快速轻松地解决这个问题?
答案 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
注意:您仍然需要数据库中的关联表,但它只是隐藏在您的模型中。