it-swarm.com.de

Ändern Sie während der ROR-Migration einen Spaltentyp von Date in DateTime

Ich muss den Spaltentyp für eine von mir erstellte App von Datum auf Datum und Uhrzeit ändern. Die Daten interessieren mich nicht, da sie noch entwickelt werden.

Wie kann ich das machen?

221
jdog

Zuerst in Ihrem Terminal:

Rails g migration change_date_format_in_my_table

Dann in Ihrer Migrationsdatei:

Für 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

Wenn Sie Rails 3 oder neuer verwenden, müssen Sie auch nicht die Methoden up und down verwenden. Sie können einfach change:

class ChangeFormatInMyTable < ActiveRecord::Migration
  def change
    change_column :my_table, :my_column, :my_new_type
  end
end
77
Lee McAlilly

In Rails 3.2 und Rails 4 hat Benjamins beliebte Antwort eine etwas andere Syntax.

Zuerst in Ihrem Terminal:

$ Rails g migration change_date_format_in_my_table

Dann in Ihrer Migrationsdatei:

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

Es gibt eine change_column Methode, führen Sie sie einfach in Ihrer Migration mit datetime als neuen Typ aus.

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

AFAIK, Migrationen sind dazu da, um zu versuchen, Daten, die Sie interessieren (d. H. Produktion), umzugestalten, wenn Sie Schemaänderungen vornehmen. Also, es sei denn, das ist falsch und da ihm die Daten egal sind, warum nicht einfach den Spaltentyp in der ursprünglichen Migration von Datum auf Datum und Uhrzeit ändern und die Migration erneut ausführen? (Hoffe du hast Tests :)).

1
fakeleft