2013-10-05 3 views
1

Привет, ребята, я хотел бы знать, есть ли способ потерять данные, если вы пытаетесь отменить миграцию только для обновления схемы? Например, после запуска rake db: migrate и после нескольких раундов вставленных данных вы хотите добавить в схему новый атрибут.Как обновить схему базы данных без потери исходных данных

Итак, мой вопрос: как добавить новый атрибут без потери предыдущей записи? можно ли это сделать? Потому что все это, пока я просто сделал, выполнив rake db: rollback STEP = ... и потерял все данные, которые я создал. Просто интересуюсь.

Спасибо за помощь От: BC2

+0

Непонятно, о чем вы просите. Вы хотите откат? Вы хотите сгенерировать текущий файл схемы? Что вы пытаетесь достичь? – Dogweather

ответ

3

, если у вас есть существующая таблица и хотите добавить новый атрибут в существующую таблицу, а затем просто написать автономную миграцию.
напр: у вас есть таблица студентов с именем атрибута, roll_no ... а теперь и хотят, чтобы добавить атрибут «адрес» в таблице студентов

$ rails generate migration AddAddressToStudents address:string 

сгенерирует

class AddAddressToStudents < ActiveRecord::Migration 
     def change 
     add_column :students, :address, :string 
     end 
    end 

затем просто запустить «rake db: migrate»

+0

спасибо за помощь =) – BC2

2

Вам не нужно откатить обновление схемы. Просто напишите новую миграцию, чтобы обновить существующую таблицу.

Например, чтобы добавить поле в таблицу пользователя ничего не разрушая, написать миграцию как:

class AddFieldsToUser < ActiveRecord::Migration 
    def change 
    change_table :users do |t| 
     t.date :birthday   # add new field 
     t.remove :first   # remove a field 
     t.rename :gender, :sex # rename a field  

    end 

    end 
end 

Смотрите здесь для получения дополнительной информации: http://guides.rubyonrails.org/migrations.html#changing-tables

Смежные вопросы