使用不同的列处理单个 Table 继承
Handling Single Table Inheritance with a different column
我有以下表格
class Product < ActiveRecord::Base
belongs_to :product_type
self.inheritance_column = :product_type_id
end
class MotorProduct < Product
end
class CarProduct < Product
end
我的数据库里也有这条记录
Product table records
#<Product id: 1, product_type_id: 1, company_id: 36, name: "Text Motor Insurancee">
Product Type table records
#<ProductType id: 1, name: "Motor">
#<ProductType id: 2, name: "Car">
当我执行 MotorProduct.all 时,它 returns 是空的。这就是我的查询 运行s
SELECT "products".* FROM "products" WHERE "products"."product_type_id" IN (0)
这意味着它无法正确映射产品类型 id.Not 确定如何映射它,但基本上当我 运行 MotorProduct.all
时,我希望我的查询成为
SELECT "products".* FROM "products" WHERE "products"."product_type_id" IN (1).
我知道我可以轻松解决所有这些问题,如果我添加一个名为 type
的列并为类型指定相同的名称 MotorProduct
但由于当前代码具有这种结构,我想看看如果我能以某种方式维护它。
感谢任何帮助
inheritance_column
是 supposed to contain class names,不是任意整数(强调我的):
Active Record allows inheritance by storing the name of the class in a column that by default is named "type" (can be changed by overwriting Base.inheritance_column
).
我找不到权限文档,但 inheritance_column
必须是字符串列,而不是整数。在内部,该字段的内容用于确定 class 以实例化对象。
我有以下表格
class Product < ActiveRecord::Base
belongs_to :product_type
self.inheritance_column = :product_type_id
end
class MotorProduct < Product
end
class CarProduct < Product
end
我的数据库里也有这条记录
Product table records
#<Product id: 1, product_type_id: 1, company_id: 36, name: "Text Motor Insurancee">
Product Type table records
#<ProductType id: 1, name: "Motor">
#<ProductType id: 2, name: "Car">
当我执行 MotorProduct.all 时,它 returns 是空的。这就是我的查询 运行s
SELECT "products".* FROM "products" WHERE "products"."product_type_id" IN (0)
这意味着它无法正确映射产品类型 id.Not 确定如何映射它,但基本上当我 运行 MotorProduct.all
时,我希望我的查询成为
SELECT "products".* FROM "products" WHERE "products"."product_type_id" IN (1).
我知道我可以轻松解决所有这些问题,如果我添加一个名为 type
的列并为类型指定相同的名称 MotorProduct
但由于当前代码具有这种结构,我想看看如果我能以某种方式维护它。
感谢任何帮助
inheritance_column
是 supposed to contain class names,不是任意整数(强调我的):
Active Record allows inheritance by storing the name of the class in a column that by default is named "type" (can be changed by overwriting
Base.inheritance_column
).
我找不到权限文档,但 inheritance_column
必须是字符串列,而不是整数。在内部,该字段的内容用于确定 class 以实例化对象。