Как редактировать таблицы миграции

Я создал свою модель, а затем заполнил файл миграции db/migration/234802843208_create_XXXXX_rb следующим:

class CreateXXXXX < ActiveRecord::Migration
  def change
    create_table :XXXXX do |t|

                t.string  :gender
        t.date    :date_of_birth
        t.string  :Marital_status
        t.string  :Spouses_name

Я запустил rake db:migrate.

Теперь я хочу отредактировать таблицу. Я хочу изменить Marital_status, чтобы он принимал логический тип данных, а не строку. Есть ли правильный способ сделать это? Могу ли я просто отредактировать таблицу и повторно запустить rake db:migrate? Вы бы порекомендовали мне откатить, отредактировать, а затем повторно выполнить миграцию или есть лучший способ?


person user3408293    schedule 13.04.2014    source источник


Ответы (3)


Вы можете просто сделать

rake db:rollback

or

rake db:migrate:down

а затем откройте файл миграции и обновите изменения

class CreateXXXXX < ActiveRecord::Migration
  def change
    create_table :XXXXX do |t|

        t.string  :gender
        t.date    :date_of_birth
        t.boolean  :Marital_status
        t.string  :Spouses_name

  end

и сделайте rake db:migrate или rake db:migrate:up

person Pavan    schedule 13.04.2014

Что мне кажется удобным в этих случаях, так это отредактировать файл, а затем запустить

rake db:migrate:redo

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

person xlembouras    schedule 13.04.2014

Вы должны создать другую миграцию и отредактировать это поле.

rails g migration edit_xxxx_marital_status

который создает файл миграции. И добавьте к нему следующий контент.

class EditXXXXMaritalStatus < ActiveRecord::Migration
 def up
    change_column XXXXX. :Marital_status, :boolean, default: false # if you waNT TO add any default value
 end

 def down
   change_column :XXXXX, :Marital_status, :string 
 end
end
person Bachan Smruty    schedule 13.04.2014
comment
Это кажется более сложным, чем другие ответы. Какие преимущества имеет этот метод? - person user3408293; 13.04.2014
comment
Если вам нужно сделать то же самое в рабочей среде, а живые данные есть в таблице, то, выполнив откат, вы потеряете данные. - person Bachan Smruty; 13.04.2014