Відповіді:
Спочатку у своєму терміналі:
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для цього потрібно.