2011-02-24 157 views
3

假设有一个名为user的activerecord类,它代表数据库的用户表。继承ActiveRecord对象

但我有不同的类型,其具有

  • 特殊功能的用户
  • 特殊变量
  • 定制的关系(雇主的has_many公司,员工belongs_to的公司:)

而且这些用户有很多共同的功能。所以我想要做的是为每种不同类型的用户创建类,然后从用户类继承它们。

  • 用户<的ActiveRecord :: Base的
  • 雇主<用户
  • 员工<用户
  • 客户<用户

什么是做这样的事情的最好方法?

感谢

回答

3

很多应用程序开始了与某种形式的User模型。随着时间的推移,随着不同类型的用户涌现,对它们进行更大的区分可能是有意义的。引入了AdminGuest类,作为User的子类。现在,共享的行为可以存在于User中,并且可以将子类型行为推送到子类。但是,所有用户数据仍可以驻留在用户表中。

所有你需要做的就是添加一个type列到users表,将持有的类名实例化一个给定的行。 Active Record在从数据库加载对象时负责实例化对象的类型。

该技术被称为单表继承或STI(简称)。

关于STI的一篇非常好的近期文章是:http://code.alexreisner.com/articles/single-table-inheritance-in-rails.html

+0

完美谢谢。最后,每个班的习惯关系呢? – 2011-02-24 05:29:18