Невозможно удалить запись из консоли rails в AWS eb cli, если для родительского класса STI указано неправильное значение подкласса

Коллега добавил новую запись для класса Производство через наш интерфейс rails admin, который является родительским классом через STI подкласса CoProduction.

Атрибут type был по ошибке заполнен через rails_admin значением, которое не является указанным подклассом CoProduction, а неверным. В результате я не могу ни удалить, ни обновить запись из консоли rails в нашей среде AWS (а интерфейс rails admin разбился и не запускается снова).

[1] pry(main)> Production.last
  Production Load (1.0ms)  SELECT  "productions".* FROM "productions" ORDER BY "productions"."id" DESC LIMIT $1  [["LIMIT", 1]]

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

РЕДАКТИРОВАТЬ

Тем временем я мог бы решить проблему, подключившись через PGADMIN к экземпляру базы данных, получив запись о виновнике и изменив ее. К сожалению, эту ошибку не удалось решить в среде ActiveRecord.


person Anna Costalonga    schedule 29.12.2017    source источник


Ответы (2)


Похоже, что запись каким-то образом была добавлена ​​путем пропуска проверки по умолчанию, определенной для STI. Вы можете следовать тому же пути, чтобы восстановить запись и установить ее правильный тип, используя:

ActiveRecord::Relation#update_all, который не создает экземпляр вовлеченного моделей и не запускает обратные вызовы/проверки Active Record.

В консоли rails найдите все вхождения неправильных типов (например, opera buffa) в модели Production и обновите ее до типа CoProduction:

Production.where(type: 'opera buffa').update_all(type: 'CoProduction')

Production после этого момента модель должна работать как обычно.

person Wasif Hossain    schedule 29.12.2017
comment
здравствуйте, спасибо, к сожалению, Rails Console не позволяла мне выполнять какие-либо подобные действия... Тем временем я мог решить проблему :) - person Anna Costalonga; 29.12.2017

Тем временем я мог бы решить проблему, подключившись через PGADMIN к экземпляру базы данных, получив запись о виновнике и изменив ее. К сожалению, эту ошибку не удалось решить в среде ActiveRecord.

person Anna Costalonga    schedule 29.12.2017
comment
это определенно может быть решено с помощью ActiveRecord. Пожалуйста, проверьте мой ответ и дайте мне знать проблемы, с которыми вы столкнулись. Спасибо - person Wasif Hossain; 29.12.2017
comment
Привет, спасибо, я должен воспроизвести ошибку, теперь ее больше нет. Проблемы уже были объяснены. - person Anna Costalonga; 30.12.2017
comment
Пожалуйста, удалите отрицательное мнение о моем решении, которое действительно решило проблему. Решение, предоставленное Васифом, не сработало, я уже пробовал это, прежде чем публиковать вопрос здесь. Всякий раз, когда я пытался обновить, это вызывало указанную выше ошибку активной записи. - person Anna Costalonga; 30.12.2017