rails update_all返回字段列表中的unknow列*

我有这个迁移任务:

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来优化迁移,因为同一所有者拥有许多工厂。

任何信息/线索都将不胜感激。

更新: 每个factoryowner拥有。 owner可以是personbotnil。为了优化迁移,工厂分为3组:

  • nil拥有的工厂可以跳过
  • person拥有的工厂,我们可以使用eachupdate来更新原始所有者字段
  • bot拥有的
  • 工厂,我们可以使用update_all

update_all需要在所有者id上显式调用bot。如果尚未在数据库中创建nil,则会引起bot头痛。由于nil.id会引发异常并破坏程序。

问题:我们使用CircleCI进行测试。该数据库还没有测试数据库,因此botnil。如果我rails db:seed需要rails db:migrate,但是rails db:migrate会抛出nil异常:(

imauzhw 回答:rails update_all返回字段列表中的unknow列*

尝试:

Factory.update_all(original_owner_id: owner.id)

编辑:我的一位资深同事提出了一个更好的版本:

Factory.where.not(owner: nil).update_all('original_owner_id = owner_id')

根据我们的情况定制:

Factory.where.not(owner: [nil,0]).update_all('original_owner_id = owner_id')

因为查询(Factory.where.not(owner: [nil,0]).to_sql)查找owner_id

本文链接:https://www.f2er.com/3137037.html

大家都在问