我有类User,以及Admin和Student的子类。
学生应该有其他专用列。请让我知道如何在Ruby on Rails中使用STI来做到这一点。
谢谢!
另外,如何填充users表?
答案 0 :(得分:1)
在Rails中,通常您在type
类上有User
列。现在,在您的子类中,您将继承User
类:
class User
end
class Admin < User
end
class Student < User
end
通过这种方式,您可以利用Rails STI,并且仍然可以灵活地为子类创建方法。
查找更多信息here
但是为了保持它有点组织,您可以将子类放在模型下的文件夹中,因此
#models/users/admin.rb
module Users
class Admin < User
end
end
#model/users/student.rb
module Users
class Student < User
end
end
现在要使用您的课程,您需要Users::Student.find(id)
<强>更新强>
在回复评论时,我认为对于专门针对学生的专栏,您可以通过协会更好地服务,比如说Student.has_one :grade
或某种类型,这样你就可以了#39 ; d已成功抽象出您的用户对象以处理常见的User方法。但要为Student
和Admin
创建一行
您可以Users::Student.create(params)
或Users::Admin.create(params)
,Rails知道如何处理STI