gpt4 book ai didi

mysql - Rails update_all 在字段列表中返回未知列 *

转载 作者:行者123 更新时间:2023-11-29 09:30:55 25 4
gpt4 key购买 nike

我有这个迁移任务:

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

非常感谢任何信息/线索。

更新:每个工厂都由一个所有者拥有。 所有者可以是机器人nil。为了优化迁移,工厂分为 3 组:

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

update_all 需要显式调用所有者(即 bot)的 id。如果尚未在数据库中创建 bot,这会导致 nil 令人头痛。由于 nil.id 引发异常并中断程序。

问题:我们使用 CircleCI 来运行测试。目前还没有测试数据库,因此 botnil。如果我 rails db:seed 它需要 rails db:migraterails db:migrate 抛出 nil 异常:(

最佳答案

尝试:

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

关于mysql - Rails update_all 在字段列表中返回未知列 *,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58768968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com