2015-07-01 61 views
0

我有一個表,稱爲resource_schedules其中包含:轉化的字符串列的陣列,以整列的軌道陣列

t.string :active_patient_ids, array: true, default: [] 

我想將它轉換爲:

t.integer :active_patient_ids, array: true, default: [] 

我已經創建了一個遷移文件,這裏是我放入它的代碼:

def up 
    change_column :resource_schedules, :active_patient_ids, :integer 
end 

def down 
    change_column :resource_schedules, :active_patient_ids, :string 
end 

然後我跑這個co命令:

rake db:migrate 

該點是我的active_patient_ids仍然是一個字符串數組。

回答

0

在上面的遷移中,您實際上並沒有改變表中內容的數據類型。如果表中已經有數據,那麼您將很難通過遷移在數據類型之間進行轉換。我建議製作一個新的空int表格,然後使用string.to_i手動將數據從字符串表格遷移到int表格。

0

您還需要遷移數據。由於您想要使用相同的列名稱,因此應該能夠重命名現有列,使用以前的名稱添加新列,然後遷移數據。

我還沒有測試過這個,但我做過類似的事情。在嘗試之前請備份你的分貝。

def up 
    rename_column :resource_schedules, :active_patient_ids, :active_patient_id_strings 
    add_column :resource_schedules, :active_patient_ids, :integer 

    ResourceSchedule.each do |schedule| 
    schedule.active_patient_ids = schedule.active_patient_id_strings.map { |s| s.to_i } 
    schedule.save 
    end 

    remove_column :resource_schedules, :active_patient_id_strings 
end