Відповіді:
Спочатку у своєму терміналі:
rails g migration change_date_format_in_my_table
Потім у вашому файлі міграції:
Для рейок> = 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
метод не використовується замість методів up
та down
методів, це тому, що change
метод не підтримує change_column
визначення міграції .
Крім того, якщо ви використовуєте Rails 3 або новіші, вам не доведеться використовувати методи up
та down
методи. Ви можете просто використовувати 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.
У Rails 3.2 та Rails 4 популярна відповідь Бенджаміна має дещо інший синтаксис.
Спочатку у своєму терміналі:
$ rails g migration change_date_format_in_my_table
Потім у вашому файлі міграції:
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_column , просто виконайте його під час міграції з датою timetime як новий тип.
change_column(:my_table, :my_column, :my_new_type)
AFAIK, міграції є для того, щоб спробувати змінити дані, які вас цікавлять (тобто виробництво) під час внесення змін у схему. Тож якщо це не так, і оскільки він сказав, що він не піклується про дані, чому б просто не змінити тип стовпця в початковій міграції з дати на дату та повторно запустити міграцію? (Сподіваюся, у вас є тести :)).
rake db:migrate:reset
для цього потрібно.