0

我有一个名为 " p_type" 的列,它是字符串,因为我认为有 types AB并且Cas strings

现在我意识到最好是拥有它,bitmask这样我才能拥有AC在一起。

如果我做

change_column :cars, :p_type, :integer

我要么会丢失所有现有的 p_type 数据,要么会出现严重错误,迁移会以某种方式扭曲数据(我不敢尝试)

有没有办法将列类型更改为 :integer并在迁移文件中具有某种功能

if A
 p_type = 1
elsif B
 p_type = 2
elsif C
 p_type = 4
end

那么迁移会改变数据类型和数据本身吗?

4

2 回答 2

0

您可以先运行一个 rake 任务来更新 p_type 列,

Model_name.each { |obj|
if obj.p_type == "A"
 p_type = "1"
elsif obj.p_type == "B"
 p_type = "2"
elsif obj.p_type == "C"
 p_type = "4"
end
obj.save
}

希望这会有所帮助。

于 2013-04-23T10:50:14.283 回答
0

解决了如何在 Heroku 中更改列类型?

rename_column :cars, :p_type , :p_type_string
add_column :cars, :p_type , :integer
Car.reset_column_information
Car.find_each { |c| c.update_attribute(:p_type , c.p_type_string) } 
remove_column :cars, :p_type_string
于 2013-04-23T11:22:21.717 回答