0

刚刚完成Michael Hartl的教程,所以这是一个新手问题。但是,经过大量的搜索,我还没有确信这是一个很好的解决方案:我有一个用户模型捕获标准属性(名称,电子邮件,密码等)。用户的验证&也使用MH的RoR教程完成。Rails - 1用户模型,但2个配置文件类型模型?

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

问:

我的研究使我认为单表继承可能是要走的路。我想我可以在User模型中创建子类Teacher & Student。然而,似乎有很多关于性病的消极想法。此外,我不确定是否可以简单地将Profile模型与其中一个子模型相关联。

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

+0

我认为最简单的方法是在users表中有一个is_teacher标志。然后你可以有teacher_profiles和student_profiles对象。可能不是最好的建筑,但它可能会满足您的需求。 – 2013-04-21 22:31:33

回答

1

另一种方式是使用polymorphic associations

UPDATE:

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。有了这个在后面,你手上就有真正的面向对象,并且可以以最合理的方式使用STI。

+0

感谢您对Vapire的回复。你能否提供关于多态关联的更多指导?我也研究过这一点,但似乎这是一个落后的关联。换句话说,似乎我不得不说:Teacher_Profile有一个用户和用户属于Teacher_Profile(当我认为它应该是相反的方式)。谢谢 – mattq 2013-04-22 16:02:06

相关问题