单表继承& ActiveRecord协会

时间:2015-08-23 00:54:12

标签: ruby-on-rails inheritance activerecord abstract-class single-table-inheritance

我正在尝试拥有其他模型继承的父模型,以及与第一个模型中的子项关联的辅助类。这是我到目前为止所拥有的......

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

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

然后我将Person设置为父类,并将两个子类继承自它,如下所示。

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类,用于与DriverPassenger子类的关联。

rails g model Vehicle color:string capacity:integer

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

但是,如果我使用rails控制台并尝试使用Driver.newPassenger.new创建新的实例驱动程序或乘客,则会遇到PostgreSQL错误。

由于我无法弄清楚的原因,Rails正在编写SQL语句以在DriverPassenger表上进行查询。但是,我的理解是,只创建了一个Person表,并且具有用于查询的type属性。

如果有人可以在这里提供一些指导,我会非常感激。

由于

1 个答案:

答案 0 :(得分:2)

由于您似乎正在尝试对personsDriver使用公用表Passenger,因此您不需要abstract_class声明或{任何一个子类中的{1}}声明。根据rails文档,当您希望类从父级继承行为时,将使用这些选项,而父级本身没有表。

下面的代码段可以正常使用。

table_name