Ruby on rails RubyonRails中的类继承

Ruby on rails RubyonRails中的类继承,ruby-on-rails,Ruby On Rails,我正在用ruby on rails构建这个小应用程序。 在应用程序中,我有以下几个模型,我不确定这是否是最佳ror实践。(我实际上是一名Java开发人员) 有一个person类,我将其用作超级类,还有staff类和customer类继承自person类。为达致这个目标,我有: class Person < ActiveRecord::Base end class Staff < ActiveRecord::Base belongs_to :person, :polymorp

我正在用ruby on rails构建这个小应用程序。 在应用程序中,我有以下几个模型,我不确定这是否是最佳ror实践。(我实际上是一名Java开发人员)

有一个person类,我将其用作超级类,还有staff类和customer类继承自person类。为达致这个目标,我有:

class Person < ActiveRecord::Base
end

class Staff < ActiveRecord::Base
    belongs_to :person, :polymorphic => true, :dependent => :destroy 
end

class CreateStaffs < ActiveRecord::Migration
  def self.up
    create_table :staffs do |t|
      t.references :person, :polymorphic => true, :null => false 
      ....
class-Persontrue,:依赖=>:destroy
结束
类createStafftrue,:null=>false
....
首先,我做的很好,但我做的是最好的吗

我要做的下一件事是创建一个表单,创建person、staff对象并将它们链接起来。我一直坚持在一个表格上有两个模型。 有人有什么建议吗

谢谢,
Kevin Ren

您在这里所做的不是将Person用作超类员工,而是在他们之间创建关系。您希望看到的是单表继承。你基本上想要这样:

class Person < ActiveRecord::Base
end

Class Staff < Person
end
class-Person

此外,您需要在Person表中有一个“type”字段,Rails使用该字段来确定给定记录属于哪个模型。有关更多信息,请参阅。

谢谢harald,我有一个问题是基于您建议的型号的。假设我有职员的用户名字段。既然Staff实际上在Person表中,那么我如何阻止Person访问username字段呢?@Kevin,你可能想单独问这个问题,这样也许会有更多的人看到并回答。我认为您唯一的选择是使用验证,或者覆盖访问方法(
Person.username
Person.username=
)。下面是一篇关于STI的好文章:谢谢@harald,下次我会记得问单独的问题。