2011-04-02 147 views
0

我有一個表以日期存儲爲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)

+2

我不會調用列「結束」,因爲它在Ruby中是一個關鍵字。 'end_time'更好。 – 2011-04-02 21:43:50

回答

1

你可能想看看reset_column_information。我猜這是你的問題,因爲你提到它是有效的,如果你單獨進行遷移,而不是在一起運行。

+0

這工作......只是停留在Event.reset_column_information並沒有更多的問題。謝謝:-) – 2011-04-02 20:43:00

+0

我今天早上醒來意識到,我也可以創建新的列作爲日期時間,轉換int並將其卡在新列中,然後刪除原來的...更乾淨。 – 2011-04-03 19:56:09

相關問題