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
changeméthode n'est pas utilisée à la place des méthodes upet down, c'est parce que la changeméthode ne prend pas en charge la change_columndé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 upet 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.