ruby-on-rails - 单表继承和 ActiveRecord 关联

标签 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 创建新实例 Driver 或 Passenger,我会遇到 PostgreSQL 错误.

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

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

谢谢

最佳答案

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

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

class Person < ActiveRecord::Base
end

class Driver < Person
    belongs_to :vehicle
end

class Passenger < Person
    belongs_to :vehicle
end

关于ruby-on-rails - 单表继承和 ActiveRecord 关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32162184/

相关文章:

c++ - 从没有虚函数的类继承的最佳方法

c++ - 如何使用来自另一个分支的类指针访问层次结构一个分支的类的成员?

sql - Rails 嵌套连接与包含嵌套连接表计数的 where

ruby-on-rails - 在 ActiveAdmin 的标题菜单中添加自定义项

ruby-on-rails - 例如,如何使用 gmail 帐户从 ruby​​ 发送电子邮件?

ruby-on-rails - Assets 模型缺少带有回形针的必需 attr_accessor

mysql - Rails 和数据库 : How do you do it nicely when things get messy?

javascript - 如何在 Rails 3.1.4 中使用 FormBuilder.new 构建表单生成器对象

c++ - protected 构造函数使基类不可实例化

php - 如何通过 Yii 2 将最后插入的 id 存储在变量中