У меня есть задача миграции:
owner = Owner.first
Factory.update_all(original_owner: owner)
Возвращается ошибка:
ActiveRecord::StatementInvalid (Mysql2::Error: Unknown column 'factories.original_owner' in 'field list': UPDATE `factories` SET `factories`.`original_owner` = 1)
Я почти уверен, что столбец есть. Миграция для создания этого столбца была успешно выполнена, и я проверил в консоли.
Я могу выполнить следующую задачу:
Factory.all.each { |c| c.update(original_employee: c.employee) }
Однако, это занимает много времени, так как он проходит через всеТаблица. Я бы хотел немного оптимизировать миграцию, используя update_all
, поскольку многие фабрики принадлежат одному и тому же владельцу.
Любая информация / подсказка очень ценится.
ОБНОВЛЕНИЕ: Каждый factory
принадлежит owner
. owner
может быть person
, bot
или nil
. Чтобы оптимизировать миграцию, фабрики делятся на 3 группы:
- фабрики, принадлежащие
nil
, которые можно пропустить - фабрики, принадлежащие
person
, которые мы можем использовать each
и update
для обновления исходного поля владельца - фабрики, принадлежащие
bot
, которые мы можем использовать update_all
update_all
, требуется явно вызвать id
навладелец, который является bot
. Это вызывает головную боль nil
в случае, если bot
еще не создан в базе данных. Поскольку nil.id
выдает исключение и прерывает работу программы.
Проблема: мы используем CircleCI для запуска теста. У него еще нет тестовой базы данных, поэтому bot
равно nil
. Если я rails db:seed
требует rails db:migrate
, но rails db:migrate
выдает nil
исключение: (