刚刚完成Michael Hartl的教程,所以这是一个新手问题。但是,经过大量的搜索,我还没有确信这是一个很好的解决方案:
我有一个用户模型,可以捕获标准属性(名称,电子邮件,密码等)。验证和验证用户身份验证也是使用MH的RoR教程完成的。
现在,在注册时,我希望新用户能够在学生用户或教师用户之间进行选择。此外,我希望任何一种类型的用户都能够为自己创建一个配置文件。 Student_Profile非常基础,而Teacher_Profile会更广泛。
问题:
我的研究让我认为单表继承可能是最佳选择。我想我可以创建子类Teacher&用户模型中的学生。然而,似乎有很多关于STI的负面想法。另外,我不确定我是否可以简单地将Profile模型与其中一个子类模型相关联。
任何建议都将不胜感激!感谢。
答案 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。