Rails:处理几个类似的模型类?

我正在建立一个课程申请系统。 高中,本科生和研究生都可以申请这门课程。 他们必须填写一些申请表。

但是,他们的信息表格相似,但不完全相同。 每个学生都有姓名,电话号码,电子邮件,地址等。但只有本科学生必须提供他们的GPA,研究生必须告诉他们正在研究哪个实验室。 还有其他微妙的差异……

那我该怎么处理呢? 做一个大桌子,但留下高中生的’GPA’栏是否为空? 或者使用三个单独的表?

此外, Student (或在三个表格中, HighSchoolStudentUndergraduateStudentGraduateStudent )和其他模型之间存在某种关系。 例如, Course有很多StudentStudent有很多Question ,等等。

您可以结合使用STI和Storefunction实现此目的。

使用名为settings的文本列声明Student的基本模型。

 class Student < ActiveRecord::Base store :settings # name, email, phone, address etc.. end class HighSchoolStudent < Student # declare HighSchoolStudent specific attributes store_accessor :settings, :gpa end class UndergraduateStudent < Student # declare UndergraduateStudent specific attributes store_accessor :settings, :attr1 end class GraduateStudent< Student # declare GraduateStudent specific attributes store_accessor :settings, :attr2 end 

在上面的示例中, HighSchoolStudent实例将具有名为gpa的属性。

您可以使用您认为的选项,例如将GPA保留为null,并为模型设置自定义validation,以便它仅根据学生类型进行检查。 单表inheritance也是一个选项,您可以在其中指定要在数据库表的列中使用的不同类名,然后只需在模型目录中添加这些类。 你可以在这里看到一些文档: http : //api.rubyonrails.org/classes/ActiveRecord/Base.html

我之前没有尝试过STI,但考虑到你上面所说的,我可能会选择那条路线,分支我的代码并看看它是如何实现的。