【发布时间】:2019-11-08 14:57:50
【问题描述】:
我有这个迁移任务:
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。如果尚未在数据库中创建 bot,这将导致 nil 头痛。由于nil.id 抛出异常并中断程序。
问题:我们使用 CircleCI 运行测试。这还没有测试数据库,所以bot 是nil。如果我rails db:seed 它需要rails db:migrate 但rails db:migrate 抛出nil 异常:(
【问题讨论】:
标签: mysql ruby-on-rails migration