0

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

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

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

问题:

我的研究使我认为单表继承可能是要走的路。我想我可以在用户模型中创建子类教师和学生。然而,似乎有很多关于 STI 的负面想法。此外,我不确定我是否可以简单地将 Profile 模型与子类模型之一相关联。

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

4

1 回答 1

1

另一种方法是使用多态关联

更新:

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 还是多态关联。

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

于 2013-04-21T21:32:39.043 回答