我有一个名为“p_type
”的列,它是字符串,因为我认为类型为A
,B
和C
为字符串
现在我意识到最好将其设为bitmask
,这样我就可以将A
和C
放在一起。
如果我这样做
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
所以迁移会改变数据类型和数据本身吗?
答案 0 :(得分: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
}
希望这会有所帮助。
答案 1 :(得分:0)
用How do I change column type in 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