Rails - 1个用户模型,但有两个配置文件类型模型?

时间:2013-04-21 21:27:46

标签: ruby-on-rails model polymorphic-associations railstutorial.org sti

刚刚完成Michael Hartl的教程,所以这是一个新手问题。但是,经过大量的搜索,我还没有确信这是一个很好的解决方案:

我有一个用户模型,可以捕获标准属性(名称,电子邮件,密码等)。验证和验证用户身份验证也是使用MH的RoR教程完成的。

现在,在注册时,我希望新用户能够在学生用户或教师用户之间进行选择。此外,我希望任何一种类型的用户都能够为自己创建一个配置文件。 Student_Profile非常基础,而Teacher_Profile会更广泛。

问题:

我的研究让我认为单表继承可能是最佳选择。我想我可以创建子类Teacher&用户模型中的学生。然而,似乎有很多关于STI的负面想法。另外,我不确定我是否可以简单地将Profile模型与其中一个子类模型相关联。

任何建议都将不胜感激!感谢。

1 个答案:

答案 0 :(得分:1)

另一种方法是使用polymorphic associations

更新:

class User < ActiveRecord::Base
  belongs_to :profileable, :polymorphic => true
end

class Teacher < ActiveRecord::Base
  has_one :profile, :as => :profileable
end

class Student < ActiveRecord::Base
  has_one :profile, :as => :profileable
end

正如您所看到的,您实际上说“老师有个人资料”和“学生有个人资料”。当然,它并不是严格的OO,但考虑到你正在使用关系数据库,没有真正的OO场景,只有模拟场景 - 无论你是否使用STI或多态关联。

如果您真的希望能够编程(并说“老师是用户”),您可能希望将数据库后端更改为面向对象的数据库,如MongoDB。在后面你有这个真正的OO,并且可以以最明智的方式使用STI。