单个 Table 继承和 ActiveRecord 关联

Single Table Inheritance & ActiveRecord Associations

我正在尝试拥有其他模型继承的 parent 模型,以及与第一个模型的 children 关联的辅助 class。这是我目前所拥有的...

我使用第一个命令创建了 parent 模型。

rails g model Person name:string age:integer height:float 

然后我将 Person 设置为 parent class,以及两个从它继承的 children class,如下所示。

class Person < ActiveRecord::Base
    self.abstract_class = true
end

class Driver < Person
    self.table_name = "Driver"
    belongs_to :vehicle
end

class Passenger < Person
    self.table_name = "Passenger"
    belongs_to :vehicle
end

我还设置了一个 Vehicle class 用于与 DriverPassenger children class 的关联。

rails g model Vehicle color:string capacity:integer

class Vehicle < ActiveRecord::Base
    has_one :driver
    has_many :passengers
end

但是,如果我使用 rails 控制台并尝试使用 Driver.newPassenger.new 创建一个新实例 Driver 或 Passenger,我会遇到一个 PostgreSQL错误。

由于我无法弄清楚的原因,Rails 正在编写 SQL 语句来查询 DriverPassenger table。但是,据我了解,只制作了一个 Person table 并具有用于查询的 type 属性。

如果有人能在这里提供一些指导,我将不胜感激。

谢谢

由于您似乎正在尝试对 DriverPassenger 使用通用的 table persons,因此您不需要 abstract_class 声明,或子 类 中的 table_name 声明。根据 rails 文档,当您希望 类 从其父级继承行为时,将使用这些选项,而父级本身没有 table.

下面的代码片段应该可以正常工作。

class Person < ActiveRecord::Base
end

class Driver < Person
    belongs_to :vehicle
end

class Passenger < Person
    belongs_to :vehicle
end