Rails迁移:更改列类型并更新现有数据

时间 2019-02-21
阅读 37
点赞 0
收藏 0
连接user1066568

在我的Rails项目中,我有一个模型对象,它有一个名为“permanent”的“boolean”类型的现有列。我需要将此列更改为可能值为1、2、3的整数。是否有任何方法可以更新数据库中的现有数据(通过Rails迁移),使所有“permanent”为false的行更改为1,所有“permanent”为true的行更改为2。

建议答案

我正在使用Postgres。不确定此解决方案是否适用于其他数据库。表用作示例-不要忘记将表名更改为您自己的表名。

  def up
    change_column :people, :permanent, 'integer USING CAST(permanent AS integer)'
    Person.connection.execute("UPDATE people SET permanent = CASE permanent WHEN 0 THEN 1 WHEN 1 THEN 2 END")
  end

  def down
    Person.connection.execute("UPDATE people SET permanent = CASE permanent WHEN 1 THEN 0 WHEN 2 THEN 1 END")
    change_column :people, :permanent, 'boolean USING CAST(permanent AS boolean)'
  end
👍 0