我试图拥有一个其他模型继承的父模型,以及一个与第一个模型的子模型关联的辅助类。这是我到目前为止所拥有的...
我使用第一个命令来创建父模型。
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
类,用于与 Driver
和 Passenger
子类关联。
rails g model Vehicle color:string capacity:integer
class Vehicle < ActiveRecord::Base
has_one :driver
has_many :passengers
end
但是,如果我使用 Rails 控制台并尝试使用 Driver.new
或 Passenger.new
创建新实例 Driver 或 Passenger,我会遇到 PostgreSQL 错误.
由于我无法弄清楚的原因,Rails 正在编写 SQL 语句来查询 Driver
或 Passenger
表。但是,据我了解,只创建了一个 Person
表,并且具有用于查询的 type
属性。
如果有人可以在这里提供一些指导,我将非常感激。
谢谢
最佳答案
由于您似乎正在尝试对 Driver
和 Passenger
使用通用表 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/