2013-09-29 1 views
3

У меня есть миграции (созданный путь назад), что мне нужно изменить, это ниже:Изменение Specific миграции

20130923000732_create_questions.rb 

мне нужно изменить

t.string to --> t.text 

, как я могу добиться этого ?

Я читал, что я могу создать новую миграцию, переименовав колонку, но я ее не совсем понял.

ответ

4

Ваше приложение находится в разработке еще, j Откройте эту миграцию в edtor, измените ее на текст и снова запустите все свои миграции. Или напишите миграцию, которая обновит этот тип поля.

Первый в вас терминале:

rails g migration change_column_type_in_questions 

Затем в миграции файла:

class ChangeColumnTypeInQuestions < ActiveRecord::Migration 
    def change 
    change_column :questions, :body, :text 
    end 
end 

миграции будет искать таблицы вопросов и обновит тип столбца тела без потери данных.

+0

Кажется, что он работал с файлом миграции переименования. Не имеет значения, что в первоначальной миграции create_question все еще есть t.string? –

+0

нет, но если у меня нет важных данных в db, я бы просто изменил тип столбца в этой миграции и сбросил бы db и построил бы его с нуля. Переименование полей с переносом полезно, когда у вас есть данные, которые необходимо сохранить. – rmagnum2002

+0

Он отлично работал с миграцией :) –

14

Если 20130923000732_create_questions.rb миграция ваша последняя миграция вы можете откатить с:

rake db:rollback 

В противном случае вы можете просто вниз конкретной миграции с ВЕРСИИ:

rake db:migrate:down VERSION=20130923000732 

После откатить миграцию, изменить ваш файл миграции и снова выполнить миграцию.

+0

Это был переходный путь назад во времени. Я попробовал rake db: migrate: down, но все мои последующие миграции были отменены. Не могли бы вы объяснить этот шаг немного дальше? –

+1

хм ваш случай отличается. создание новой миграции решит вашу проблему. – xaph

2

Run rails generate migration change_string_to_text_in_questions создается новый файл миграции будет создан, с

def change 
    end 

метод, теперь вставить, change_column :table_name, :column_name, :type теперь ваш файл миграции должен выглядеть следующим образом,

def change 
    change_column :table_name, :column_name,:type 
end 

После этого Сохранить Изменения и пробеги db:migrate

+0

Будет ли рельсы знать по имени миграции, что я имею в виду миграция вопросов? потому что их много. –

+2

Вы должны указать имя таблицы и имя столбца для изменения в файле миграции, она будет автоматически изменена для вас после переноса изменений. – ajkumar25

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