我试图在Rails 3中构建学生门户,但是我遇到了一些问题。与关系的单表继承
这个想法是有一个用户表,其中包含一个给定的人的所有基本数据。有关示例属性,请参见下面的UML/E-R。
- 用户既可以是助理和学生同时。
- 助理和学生应该从继承用户。
这个想法是直接从用户身上继承,像这样。
class User < ActiveRecord::Base
# ...
def awesome?
[true, false].sample
end
# ...
end
class Student < User
has_one :student
has_many :registered_courses, through: :students
end
Student.new.awesome?
这使得学生模型中的关系很奇怪。 has_many :registered_courses, through: :students
我想最终能做到这样的事情。
student.full_name
student.pin_code
student.registered_courses
一个解决方案是实现手工方法,这样
class Student < User
has_one :student
def pin_number
student.pin_number
end
end
但它看起来真的很奇怪指学生模型内的学生对象。
有没有更清晰,更好的方法呢?
这里是一个UML/E-R的例子。我试图通过删除不相关的属性来保持这个例子的清洁。这就是为什么注册课程实体的属性如此之少。
为什么table'Student'需要'id'和'user_id'?这是Rails限制吗? – 2012-02-06 02:19:51
'id'不需要。我不确定为什么它在那里。 – Oleander 2012-02-06 02:23:51
总共有2或4张桌子吗?单表继承应该是2 ...(学生和助理应该是同一个用户表)。你的情况看起来像多表继承(如果它是MTI,那么你不会继承模型......) – PeterWong 2012-02-06 02:50:34