2013-04-23 26 views
0

我有一个名为“p_type”列是字符串,因为我认为有类型ABC为字符串在迁移替换列的值

现在我意识到,最好是有作为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 

因此迁移将CH愤怒的数据类型和数据本身?

回答

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 
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 
} 

希望这会有所帮助。

+0

你将不得不从铁轨控制台做到这一点(轨道ç-e生产)或迁移解决它。我不确定为数据迁移创建新的rake任务是一个不错的选择。 – holaSenor 2013-04-23 11:00:48