我有一個名爲record_time
的列來存儲記錄的時間,目前列數據類型是整數,數據保存爲unix時間戳,現在我想找到一種方法將此unix時間戳轉換爲datetime字段,而不會丟失該列中的數據。現在,我已經創建了一個遷移文件,如下所示:如何在Rails遷移中將整數列更改爲datetime?
class ChangeRecordTimeToDatetime < ActiveRecord::Migration
def up
as = Audio.all.map {|a| {id: a.id, record_time: Time.at(a.record_time)}}
Audio.all.update_all("record_time = NULL")
change_column :audios, :record_time, :datetime
as.map {|a| Audio.find(a[:id]).update(record_time: a[:record_time])}
end
def down
as = Audio.all.map {|a| {id: a.id, record_time: a.record_time.to_i}}
Audio.all.update_all("record_time = NULL")
change_column :audios, :record_time, :integer
as.map {|a| Audio.find(a[:id]).update(record_time: a[:record_time])}
end
end
,這引發了我的錯誤,如提前這個
Mysql2::Error: Incorrect datetime value: '1493178889' for column 'record_time' at row 1: ALTER TABLE `audios` CHANGE `record_time` `record_time` datetime DEFAULT NULL
感謝。
在插入之前,您需要將UNIX時間戳轉換爲DateTime對象。你可以這樣做:'DateTime.strptime(「1493178889」,'%s')' –
謝謝,目前我正在使用'Time.at(1493178889)'DateTime.strptime(「1493178889 「,'%s')''和'Time.at(1493178889)'只是爲了更清楚。 –
'DateTime.strptime'返回一個'DateTime'對象。 'Time.at'返回一個'時間'。由於您的專欄是'DATETIME',因此您可能會希望在可能的情況下使用Ruby'DateTime'。 –