Risposte:
Primo nel tuo terminale:
rails g migration change_date_format_in_my_table
Quindi nel tuo file di migrazione:
Per binari> = 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
metodo non viene utilizzato al posto dei metodi up
e down
, è perché il change
metodo non supporta la change_column
definizione di migrazione .
Inoltre, se stai utilizzando Rails 3 o versioni successive non devi utilizzare i metodi up
e down
. Puoi semplicemente usare 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.
In Rails 3.2 e Rails 4, la risposta popolare di Benjamin ha una sintassi leggermente diversa.
Primo nel tuo terminale:
$ rails g migration change_date_format_in_my_table
Quindi nel tuo file di migrazione:
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
C'è un metodo change_column , basta eseguirlo nella migrazione con datetime come nuovo tipo.
change_column(:my_table, :my_column, :my_new_type)
AFAIK, le migrazioni sono lì per cercare di rimodellare i dati che ti interessano (ovvero la produzione) quando si apportano modifiche allo schema. Quindi, a meno che non sia sbagliato, e dal momento che ha detto che non gli importa dei dati, perché non modificare semplicemente il tipo di colonna nella migrazione originale da data a data e ora ed eseguire nuovamente la migrazione? (Spero che tu abbia i test :)).
rake db:migrate:reset
serve.