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

时间:2019-02-21 04:14:40

标签: ruby-on-rails database rails-migrations

在我的Rails项目中,我有一个模型对象,该模型对象具有一个名为“ permanent”的现有列,类型为“ Boolean”。我需要将此列更改为可能值为1、2、3的Integer。我有什么办法(通过rails迁移)更新数据库中的现有数据,以使所有以'permanent'为假的行都为更改为1,并将所有'permanent'为true的行更改为2。

1 个答案:

答案 0 :(得分:2)

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

  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