Réponses:
Tout d'abord dans votre terminal:
rails g migration change_date_format_in_my_table
Puis dans votre fichier de migration:
Pour les rails> = 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
méthode n'est pas utilisée à la place des méthodes up
et down
, c'est parce que la change
méthode ne prend pas en charge la change_column
définition de migration .
De plus, si vous utilisez Rails 3 ou une version plus récente, vous n'avez pas besoin d'utiliser les méthodes up
et down
. Vous pouvez simplement utiliser 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.
Dans Rails 3.2 et Rails 4, la réponse populaire de Benjamin a une syntaxe légèrement différente.
Tout d'abord dans votre terminal:
$ rails g migration change_date_format_in_my_table
Puis dans votre fichier de migration:
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
Il existe une méthode change_column , il suffit de l'exécuter dans votre migration avec datetime comme nouveau type.
change_column(:my_table, :my_column, :my_new_type)
AFAIK, les migrations sont là pour essayer de remodeler les données qui vous intéressent (c'est-à-dire la production) lorsque vous effectuez des modifications de schéma. Donc, à moins que cela ne soit faux, et puisqu'il a dit qu'il ne se souciait pas des données, pourquoi ne pas simplement modifier le type de colonne dans la migration d'origine de date à datetime et réexécuter la migration? (J'espère que vous avez des tests :)).
rake db:migrate:reset
.