Rails STI - могу ли я получить значение type непосредственно из db?

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

add_column :discounts, :name, :string
Discount.all.each do |discount|
  discount.update(name: discount.type)
end

Это происходит со следующей ошибкой:

The single-table inheritance mechanism failed to locate the subclass: 'RetailerStaffFlatRate'

Вместо того, чтобы использовать discount.typeМогу ли я просто получить значение, хранящееся в БД, чтобы модель не вылетала?

1 ответ

В вашей родительской модели вы можете определить метод для их получения:

def self.types unscoped.select(:type).distinct.pluck(:type) end

Тогда просто используйте Discount.types и вы получите массив с существующими типами.

ПРИМЕЧАНИЕ. При таком подходе перечисляются только типы, присутствующие в базе данных.

Другие вопросы по тегам