web-dev-qa-db-fra.com

Modifier un type de colonne de Date en DateTime lors de la migration ROR

Je dois changer le type de colonne de date en date/heure pour une application que je crée. Je me fiche des données car elles sont encore en développement.

Comment puis-je faire ceci?

221
jdog

D'abord dans votre terminal:

Rails g migration change_date_format_in_my_table

Puis dans votre fichier de migration:

Pour 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
502
apneadiving

De plus, si vous utilisez Rails 3 ou une version plus récente, vous n'avez pas à 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
77
Lee McAlilly

Dans Rails 3.2 et Rails 4, Benjamin réponse courante a une syntaxe légèrement différente.

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
40
Thomas Klemm

Il existe une méthode change_column , exécutez-la simplement dans votre migration avec datetime comme nouveau type.

change_column(:my_table, :my_column, :my_new_type)
23
Nikita Rybak

Autant que je sache, les migrations sont là pour tenter de remodeler les données qui vous tiennent à cœur (c’est-à-dire la production) lors de modifications de schéma. Donc, à moins que ce ne soit faux, et puisqu'il a déclaré ne pas se soucier des données, pourquoi ne pas simplement modifier le type de colonne dans la migration d'origine de date à date et refaire la migration? (J'espère que vous avez des tests :)).

1
fakeleft