使用不同的列

时间:2018-05-18 11:57:53

标签: ruby-on-rails ruby postgresql ruby-on-rails-4 single-table-inheritance

我有以下表格

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时,它返回空。这就是我的查询运行

SELECT "products".* FROM "products" WHERE "products"."product_type_id" IN (0)

这意味着它无法正确映射产品类型ID。不确定如何映射它,但基本上当我运行MotorProduct.all时,我希望我的查询是

SELECT "products".* FROM "products" WHERE "products"."product_type_id" IN (1).

我知道如果我添加一个名为type的列并给出类型相同的名称MotorProduct,我可以轻松解决所有这些问题,但由于当前代码具有此结构,我试图看看是否我能以某种方式维持它。

感谢任何帮助

2 个答案:

答案 0 :(得分:3)

inheritance_columnsupposed to contain class names,不是任意整数(强调我的):

  

Active Record允许通过将类的名称存储在默认名称为&#34; type&#34;的列中来继承。 (可以通过覆盖Base.inheritance_column)来改变。

答案 1 :(得分:0)

我找不到权限文档,但inheritance_column必须是字符串列,而不是整数。在内部,该字段的内容用于确定用于实例化对象的类。