Удалить модель rails после миграции

мне кажется странным, что создание модели, запуск миграции, ее уничтожение и создание снова той же модели сообщает SQL exception:

project|master ⇒ rails g model name name
      invoke  active_record
      create    db/migrate/20130417185814_create_names.rb
      create    app/models/name.rb
project|master⚡ ⇒ rake db:migrate
==  CreateNames: migrating ====================================================
-- create_table(:names)
   -> 0.0020s
==  CreateNames: migrated (0.0021s) ===========================================
project|master⚡ ⇒ rails d model name
      invoke  active_record
      remove    db/migrate/20130417185814_create_names.rb
      remove    app/models/name.rb
project|master⚡ ⇒ rake db:migrate
project|master⚡ ⇒ rails g model name test
      invoke  active_record
      create    db/migrate/20130417185845_create_names.rb
      create    app/models/name.rb
project|master⚡ ⇒ rake db:migrate
==  CreateNames: migrating ====================================================
-- create_table(:names)
rake aborted!
An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: table "names" already exists: CREATE TABLE "names" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "test" varchar(255), "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL) /path/project/db/migrate/20130417185845_create_names.rb:3:in `change'
-- create_table("names", {:force=>true})
   -> 0.0100s
-- initialize_schema_migrations_table()
   -> 0.0025s
-- assume_migrated_upto_version(20130417185814, ["/path/project/db/migrate"])
   -> 0.0010s
You have 1 pending migrations:
  20130417185845 CreateNames
Run `rake db:migrate` to update your database then try again.

может быть, я делаю что-то неправильно? Миграция имеет код для удаления таблицы - может ли он использоваться только для отката?

решение

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

  1. создать модели: rails g model user name
  2. сделать миграций: rake db:migrate
  3. реализовать что - то, вдруг помните, что вам нужно удалить модель
  4. отменить конкретную миграцию:rake db:migrate:down VERSION=20130417185814, где 20130417185814 is migration id (можно увидеть в rake db:migrate:status)
  5. удалить модели: rails d model user
  6. вдруг вспомнили, что вам нужна эта модель, но с другими полями
  7. создать модели: rails g model user email group:references
  8. успешно перенести базу данных:rake db:migrate

3 ответов


rails d model name 

Это просто удаляет модель, а не выполненную миграцию (которая создала таблицу в базе данных).

Если вы хотите удалить обе модели и таблицы, вам придется сделать следующее

rake db:rollback 
rails d model name

вы удалили модель-это другая операция, чем откат миграции.

уничтожение модели делает именно это, и только это; оно не имеет ничего общего с миграциями.


в соответствии с вашей ошибкой миграции должно быть что-то не так с файлами миграции, кроме того, тот, который ссылается на таблицу create names.

пожалуйста, посмотрите на этот файл, в ваш метод изменения.

метод изменения в файле миграции должен выполнять код БД, этот код БД может выполнять некоторые операции над БД, и тот же код на изменении должен быть правильным для выполнения отката.

Если вы хотите разделить между двумя Вы следует поставить код на метод up, который будет выполнять операции над БД, а на метод down противоположные операции прокатки.

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

Если вам нужна помощь, пожалуйста, после переноса файла.

пожалуйста, также взгляните на руководства:http://guides.rubyonrails.org/migrations.html