2014-04-19 2 views
-1

Итак, вы создали свою модель «рельсы генерируют тест модели (входы)», вы используете rake db: migrate проверили ваш файл схемы, все выглядит хорошо и работает и записывается в sqlite. Но тогда вы понимаете, что вам нужен другой атрибут в БД. Один из способов - использовать rake db: rollback, внести изменения в файл переноса, rake db: снова выполнить миграцию, и hey presto все выглядит хорошо. Однако выполнение rake db: rollback потеряло все мои данные, уже сохраненные в sqlite. Поэтому я предполагаю, что это не правильный способ сделать это? Каков наилучший способ?проблема миграции базы данных рельсов

class CreatePosts < ActiveRecord::Migration 
def change 
create_table :posts do |t| 
    t.text :title 
    t.text :requester 
    t.text :requester_email 
    t.text :customer 
    t.text :contact 
    t.text :customer_email 
    t.text :customer_phone 
    t.string :type_of_change 
+0

Вы ищете это? http://stackoverflow.com/questions/10352832/adding-a-new-field-to-rails-model/ – Matzi

+0

Да, я думаю, что это то, где я должен искать, кроме того, что я пытаюсь добавить новые таблицы вместо столбцов – user3216968

+0

Что вы подразумеваете под «добавлением новых таблиц» со сценарием, заданным в вопросе? Очевидно, вы сказали, что пытались добавить атрибут/столбец к уже добавленной миграции. Вышеупомянутая ссылка дает вам идеальный ответ для этого. –

ответ

0

На самом деле db:rollback является лучшим способом. Конечно, когда вы делаете db:rollback, он уничтожит ваши существующие данные, но вам нужно сделать db:migrate, чтобы получить данные снова в таблицах.

Если вы не хотите заниматься rake db:rollback, тогда создайте еще migration file, который сделает эту работу за вас.

Редактировать

Вы должны выполнить следующую команду, чтобы этот столбец добавляется в вашей posts таблице.

rails g migration AddImplementerToPosts implementer:text 

и сделать rake db:migrate, чтобы убедиться, что столбец добавляется в таблицу.

+0

Хорошо, но я обнаружил, что данные, хранящиеся в базе данных, у которых есть вход, также потеряны. Он действительно восстанавливает таблицы, но не входные данные. – user3216968

+0

@ user3216968 Я отредактировал свой ответ. Пожалуйста, взгляните на него. – Pavan

+0

ok Я сделал это ...Я ожидаю увидеть новое дополнение, подобное приведенному выше примеру, который читает t.text: implementer, но в новом файле, конечно. Однако я не вижу этого ... add_column: posts,: implementer,: text – user3216968

0

Да, db:rollback забирает последнюю миграцию, так что если в последней миграции вы добавили несколько столбцов, db:rollback удалит их (и если изменить миграции и запустить его снова, будут добавлены эти поля, но данные уже потеряно).

Правильный способ добавления дополнительных полей - создать новую миграцию и добавить туда эти поля.

1

Вы можете создать новую миграцию с помощью rails g migration <migration_name> (например, rails g migration add_foo_to_blah), а затем внутри этой новой миграции внести необходимые изменения.

например. Вы можете добавлять новые столбцы, переименовывать столбцы и т.д.

Для получения дополнительной информации: http://guides.rubyonrails.org/migrations.html#creating-a-standalone-migration

+0

ОК, я думаю, что я слежу, но я добавил свою миграцию выше, и это новые таблицы, которые мне нужны. – user3216968

+0

, поэтому вы создаете новую таблицу точно так же, как вы создали свою последнюю таблицу. – sevenseacat

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