Antworten:
Zuerst in Ihrem Terminal:
rails g migration change_date_format_in_my_table
Dann in Ihrer Migrationsdatei:
Für Schienen> = 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
anstelle der Methoden up
und keine einzelne Methode verwendet wird down
, liegt dies daran, dass die change
Methode die change_column
Migrationsdefinition nicht unterstützt .
Wenn Sie Rails 3 oder höher verwenden, müssen Sie die Methoden up
und nicht down
verwenden. Sie können einfach verwenden 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 und Rails 4 ist 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
Es gibt eine change_column- Methode. Führen Sie sie einfach in Ihrer Migration mit datetime als neuem Typ aus.
change_column(:my_table, :my_column, :my_new_type)
AFAIK, Migrationen dienen dazu, Daten, die Ihnen wichtig sind (dh die Produktion), bei Schemaänderungen umzugestalten. Wenn dies nicht falsch ist und er gesagt hat, dass ihm die Daten egal sind, warum nicht einfach den Spaltentyp in der ursprünglichen Migration von Datum zu Datum / Uhrzeit ändern und die Migration erneut ausführen? (Hoffe du hast Tests :)).
rake db:migrate:reset
.