Обработка наследования одной таблицы с другим столбцом - PullRequest
0 голосов
/ 18 мая 2018

У меня есть следующие таблицы

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)

, что означает, что он не смог правильно отобразить идентификатор типа продукта. Не уверен, как отобразить его, но в основном, когда я запускаю MotorProduct.all, я ожидаю, что мойзапрос будет

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

Я знаю, что могу легко решить все это, если я добавлю столбец с именем type и дам типу то же имя MotorProduct, но так как текущий код имеет эту структуру, япытаясь понять, смогу ли я как-нибудь это поддержать.

Любая помощь приветствуется

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Я не могу найти документы по правам, но inheritance_column должен быть столбцом строки, а не целым числом.Внутренне содержимое этого поля используется для определения класса, для которого создается экземпляр объекта.

0 голосов
/ 18 мая 2018

inheritance_column - это , который должен содержать имена классов , а не произвольные целые числа (выделено мое):

Active Record позволяет наследовать путем хранения имени класса в столбце, который по умолчанию называется «тип» (можно изменить, переписав Base.inheritance_column).

...