Подход с двумя миграциями не разрушителен и позволит вам использовать postgres magi c в прямом обновлении. Это также позволит вам убедиться, что все работает как положено ...
def change
rename_column :orders, :cuts_off_at, :cuts_off_at_old
add_column :orders, :cuts_off_at, :integer
execute("UPDATE orders SET cuts_off_at = EXTRACT(epoch from ('2000-01-01 00:00:00'::time - cuts_off_at_old))")
end
Тогда вы можете просто удалить старый столбец в более поздней миграции ...
def change
remove_column :orders, :cuts_off_at_old
end
Или если вы нужен подъем вниз ...
def up
rename_column :orders, :cuts_off_at, :cuts_off_at_old
add_column :orders, :cuts_off_at, :integer
execute("UPDATE orders SET cuts_off_at = EXTRACT(epoch from ('2000-01-01 00:00:00'::time - cuts_off_at_old))")
end
def down
remove_column :orders, :cuts_off_at
rename_column :orders, :cuts_off_at_old, :cuts_off_at
end