You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ActiveRecord迁移中添加默认值为FALSE但现有数据为TRUE的列

实现方法

要让现有数据的didFoo值为true,同时新数据默认使用false,需要拆分迁移步骤,避免添加列时直接给所有行设默认值:

class AddDidFoo < ActiveRecord::Migration[6.1]
  def change
    # 1. 先添加布尔列,暂时不设置默认值
    add_column :mytable, :didFoo, :boolean

    # 2. 更新所有现有数据行的didFoo为true
    MyTable.update_all(didFoo: true)

    # 3. 为列设置默认值false,后续新增数据会自动使用这个默认值
    change_column_default :mytable, :didFoo, false
  end
end

注意事项

  • 确保MyTable是对应数据库表的Rails模型类名(首字母大写、单数形式),如果模型名和表名不匹配,也可以直接用原生SQL更新:
    execute "UPDATE mytable SET didFoo = true;"
    
  • 若表数据量极大,update_all可能存在性能问题,此时建议用分批更新或者直接执行原生SQL语句。

内容的提问来源于stack exchange,提问作者gerbil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 05:20:42