我有这个迁移任务:
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
来更新原始所有者字段
由 - 工厂,我们可以使用
update_all
bot
拥有的 update_all
需要在所有者id
上显式调用bot
。如果尚未在数据库中创建nil
,则会引起bot
头痛。由于nil.id
会引发异常并破坏程序。
问题:我们使用CircleCI进行测试。该数据库还没有测试数据库,因此bot
是nil
。如果我rails db:seed
需要rails db:migrate
,但是rails db:migrate
会抛出nil
异常:(