Ruby on rails Rails随时间迁移
我有一个表,其中日期存储为unix时间戳(INT)。我希望我的迁移将这些int移到另一列,将第一列的类型更改为datetime,然后将int转换为ruby times,并将它们放回第一列。这是我的迁移:Ruby on rails Rails随时间迁移,ruby-on-rails,migration,Ruby On Rails,Migration,我有一个表,其中日期存储为unix时间戳(INT)。我希望我的迁移将这些int移到另一列,将第一列的类型更改为datetime,然后将int转换为ruby times,并将它们放回第一列。这是我的迁移: def self.up add_column :events, :start_date_int, :int Event.all.each do |event| event.start_date_int = event.start_date even
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个事件)
出于某种原因,event.start_date=尝试将整数粘贴到event.start_date而不是转换的时间的时间。如果我将第二个循环分离到另一个迁移中,并分别运行这两个迁移(分别通过db:migrate:up VERSION=X),那么一切都正常工作,但是如果两个迁移都通过一个普通的db:migrate一起运行,即使它们位于不同的文件中,它也会失败。有什么想法吗
(这是带有MySQL的rails 3)您可能想看看。我猜这是您的问题,因为您提到,如果您单独进行迁移,它会起作用,但如果一起运行,则不会起作用。这很有效。。。只是停留在Event.reset\u column\u信息中,没有其他问题。谢谢:-)今天早上醒来,我意识到我也可以创建一个新列作为datetime,转换int并将其粘贴到新列中,然后删除原来的。。。更干净。我不会称一列为“end”,因为它是Ruby中的一个关键字<代码>结束时间更好。