Изменить тип столбца с даты на дату и время во время миграции ROR - PullRequest
221 голосов
/ 04 марта 2011

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

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

Ответы [ 5 ]

499 голосов
/ 04 марта 2011

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

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
77 голосов
/ 01 декабря 2012

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

class ChangeFormatInMyTable < ActiveRecord::Migration
  def change
    change_column :my_table, :my_column, :my_new_type
  end
end
40 голосов
/ 30 октября 2013

В 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
23 голосов
/ 04 марта 2011

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

change_column(:my_table, :my_column, :my_new_type)
1 голос
/ 01 ноября 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...