Редактирование типа поля базы данных с помощью db: migrate - PullRequest
0 голосов
/ 19 января 2011

Я работаю над веб-приложением Ruby on Rails и меня интересует изменение типа двух полей в моей модели Project. Когда я создал модель, я дал двум своим полям (start_time и end_time) тип int, и я хотел бы изменить его на тип даты / времени.

Поскольку я работаю с командой (и, вероятно, также потому, что это правильно, я бы хотел изменить эти типы полей, используя rake db:migrate. Как мне создать файл для этого? Какие самые лучшие (или единственные) типы даты / времени существуют в Ruby / Rails?

1 Ответ

1 голос
/ 19 января 2011

Запустите script/rails generate migration UpdateTimeFields и используйте следующее. (Существует также метод change_column, но я не верю, что он способен изменить столбец int на столбец datetime при сохранении каких-либо данных).

class UpdateTimeFields < ActiveRecord::Migration
  def self.up
    rename_column :projects, :start_time, :old_start_time
    rename_column :projects, :end_time, :old_end_time
    add_column :projects, :start_time, :datetime
    add_column :projects, :end_time, :datetime

    # If applicable, insert code to iterate through your existing
    # records and update the new start_time and end_time fields
    # based on your int data.

    remove_column :projects, :old_start_time
    remove_column :projects, :old_end_time
  end

  def self.down
    # do the opposite of above: rename the datetime fields, create the int
    # fields again, migrate the data back into the int fields, and delete
    # the datetime fields.
  end
end
...