我有一個表以日期存儲爲unix時間戳(整數)。我希望我的遷移將這些整數移動到另一列,將第一列的類型更改爲datetime,然後將整數轉換爲ruby時間並將其粘貼回第一列。這是我的移民:Rails隨着時間遷移
def self.up
add_column :events, :start_date_int, :int
Event.all.each do |event|
event.start_date_int = event.start_date
event.save
end
change_column :events, :start_date, :datetime
Event.all.each do |event|
time = Time.at(event.start_date_int)
event.start_date = time
puts time
puts event.start_date
event.save
end
end
端子輸出是這樣的:
== DatesToDates: migrating ===================================================
-- add_column(:events, :start_int, :int)
-> 0.2880s
-- add_column(:events, :end_int, :int)
-> 0.3138s
-- change_column(:events, :start, :datetime)
-> 0.2695s
-- change_column(:events, :end, :datetime)
-> 0.2959s
Sun May 01 13:00:00 -0400 2011
1304269200
== DatesToDates: migrated (1.2923s) ==========================================
(只有1在開發DB事件)
出於某種原因event.start_date =時間試圖將int粘貼到event.start_date中,而不是轉換後的時間。如果我將第二個循環與另一個遷移分開並單獨運行(通過db:migrate:up VERSION = X),一切正常,但是如果兩個遷移通過正常的db:migrate一起運行,即使它們分開文件,它失敗了,如上所述。有任何想法嗎?
(這是與MySQL軌道3)
我不會調用列「結束」,因爲它在Ruby中是一個關鍵字。 'end_time'更好。 – 2011-04-02 21:43:50