Odpowiedzi:
Najpierw w twoim terminalu:
rails g migration change_date_format_in_my_table
Następnie w pliku migracji:
Dla szyn> = 3,2:
class ChangeDateFormatInMyTable < ActiveRecord::Migration
def up
change_column :my_table, :my_column, :datetime
end
def down
change_column :my_table, :my_column, :date
end
end
change
nie zastosowano jednej metody zamiast metod up
i down
, to dlatego, że change
metoda nie obsługuje change_column
definicji migracji .
Ponadto, jeśli używasz Railsów 3 lub nowszych, nie musisz używać metod up
i down
. Możesz po prostu użyć change
:
class ChangeFormatInMyTable < ActiveRecord::Migration
def change
change_column :my_table, :my_column, :my_new_type
end
end
This migration uses change_column, which is not automatically reversible.
To make the migration reversible you can either:
1. Define #up and #down methods in place of the #change method.
2. Use the #reversible method to define reversible behavior.
W Railsach 3.2 i Railsach 4 popularna odpowiedź Benjamina ma nieco inną składnię.
Najpierw w twoim terminalu:
$ rails g migration change_date_format_in_my_table
Następnie w pliku migracji:
class ChangeDateFormatInMyTable < ActiveRecord::Migration
def up
change_column :my_table, :my_column, :datetime
end
def down
change_column :my_table, :my_column, :date
end
end
Istnieje metoda change_column , po prostu uruchom ją podczas migracji z datetime jako nowy typ.
change_column(:my_table, :my_column, :my_new_type)
AFAIK, migracje mają na celu przekształcenie danych, na których Ci zależy (tj. Produkcji) podczas wprowadzania zmian w schemacie. Więc jeśli nie jest to złe, a ponieważ powiedział, że nie dba o dane, dlaczego po prostu nie zmodyfikować typu kolumny w oryginalnej migracji z daty do daty i godziny i ponownie uruchomić migrację? (Mam nadzieję, że masz testy :)).
rake db:migrate:reset
.