0

Для моих классовActiveRecord :: SubclassNotFound, независимо от того, какой столбец имя я выбираю

class User < ActiveRecord::Base 

    self.inheritance_column = :user_type 
    scope :customers, -> { where(user_type: '1') } 
    scope :freight_forwarders, -> { where(user_type: '2') } 
end 

class FreightForwarder < User 

    has_many :quotes, foreign_key: "ff_id" 

end 

class Customer < User 

    has_many :quotes, foreign_key: "ff_id" 

end 

[1] Я получаю следующее сообщение об ошибке, когда я пытаюсь вызвать User.customers

ActiveRecord :: SubclassNotFound: механизм наследования одной таблицы не смог найти подкласс: '1'. Эта ошибка возникает из-за того, что столбец «user_type» зарезервирован для хранения класса в случае наследования . Пожалуйста, переименуйте этот столбец, если вы не предполагали, что он будет , используемый для хранения класса наследования или перезаписывает User.inheritance_column, чтобы использовать другой столбец для этой информации.

[2], когда я пытаюсь вызвать Customer.all запрос выполняется, как это,

SELECT "users".* FROM "users" WHERE "users"."user_type" IN (0) 

Я не могу понять, почему это «0» должно быть «1».

ответ

1

Полное имя класса STI хранится в колонке user_type, а не '0' или '1'. Проверьте find_sti_class class method.

Здесь метод пытается найти класс с именем 1

Механизм наследования одной таблицы не удалось найти подкласс: «1».

Меняйте области для

scope :customers, -> { where(user_type: 'Customer') } 
    scope :freight_forwarders, -> { where(user_type: 'FreightForwarder') } 

Что касается Customer.all запроса. Я не знаю, как он генерирует этот запрос, но, возможно, вы переопределили что-то, когда вы определили эти области.

+0

Спасибо большое, это сработало :) –

Смежные вопросы