我有两种类型的用户(普通用户,超级用户)。使用其他表扩展一个基本用户类的正确方法是什么?
我在想这样的事情,但我不确定我是否会朝着正确的方向前进:
class User < ActiveRecord::Base
end
class SuperUser < User
end
class RegularUser < User
end
这是在Rails中执行此操作的正确方法吗?谢谢:))
答案 0 :(得分:2)
这是100%正确的方法,但是您需要记住,所有模型都将存储在数据库中的一个表中。此方法称为STI(单表继承),并且在模型中只需要一个额外的字段type
。
答案 1 :(得分:2)
如果您想拥有不同类型的用户,我会使用用户角色与不同的用户表等。
CanCan是一个非常好的宝石,文档很棒: https://github.com/ryanb/cancan/wiki/Role-Based-Authorization
你也会有好帮手.can?或者。不是吗?和更多。
答案 2 :(得分:1)
是的,您还应该使用单表继承。这意味着您应该在用户模型中添加一个名为“type”的列。 Rails识别列'类型'并将其视为特殊。基本上,类型模型中的所有条目都将引用另一个模型。在该模型中,您可以为每种类型定义规则。验证您的用户模型也是一个好主意,这样只能输入您想要的两种类型。这应该有效:
class User < ActiveRecord::Base
validates :type, :inclusion => {:in => ['SuperUser', 'RegularUser']}
end