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