使用单表继承(STI)创建子类

时间:2016-06-18 21:02:04

标签: ruby-on-rails ruby-on-rails-4

我有类User,以及Admin和Student的子类。

学生应该有其他专用列。请让我知道如何在Ruby on Rails中使用STI来做到这一点。

谢谢!

另外,如何填充users表?

1 个答案:

答案 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方法。但要为StudentAdmin创建一行 您可以Users::Student.create(params)Users::Admin.create(params),Rails知道如何处理STI