如何扩展模型类?

时间:2014-02-08 22:51:37

标签: ruby-on-rails ruby activerecord

我有两种类型的用户(普通用户,超级用户)。使用其他表扩展一个基本用户类的正确方法是什么?

我在想这样的事情,但我不确定我是否会朝着正确的方向前进:

class User < ActiveRecord::Base
end

class SuperUser < User
end

class RegularUser < User
end

这是在Rails中执行此操作的正确方法吗?谢谢:))

3 个答案:

答案 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