it-swarm.com.ru

Изменить тип столбца с даты на дату и время во время миграции ROR

Мне нужно изменить тип столбца от даты к дате для приложения, которое я создаю. Меня не волнуют данные, так как они все еще разрабатываются.

Как я могу это сделать?

221
jdog

Сначала в вашем терминале:

Rails g migration change_date_format_in_my_table

Тогда в вашем файле миграции:

Для 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
498
apneadiving

Кроме того, если вы используете Rails 3 или новее, вам не нужно использовать методы up и down. Вы можете просто использовать change:

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

В Rails 3.2 и Rails 4, Benjamin's популярный ответ имеет немного другой синтаксис.

Сначала в вашем терминале:

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

Есть метод change_column , просто запустите его в вашей миграции с datetime в качестве нового типа.

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

AFAIK, миграции существуют, чтобы попытаться изменить данные, которые вас интересуют (например, производство) при внесении изменений в схему. Так что, если это не так, и, поскольку он сказал, что не заботится о данных, почему бы просто не изменить тип столбца в исходной миграции с даты на дату и время и повторно запустить миграцию? (Надеюсь, у вас есть тесты :)).

1
fakeleft