Удалить модель 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.
может быть, я делаю что-то неправильно? Миграция имеет код для удаления таблицы - может ли он использоваться только для отката?
решение
удалить модель и таблицу базы данных и создать новую довольно легко:
- создать модели:
rails g model user name
- сделать миграций:
rake db:migrate
- реализовать что - то, вдруг помните, что вам нужно удалить модель
- отменить конкретную миграцию:
rake db:migrate:down VERSION=20130417185814
, где20130417185814
is migration id (можно увидеть в rake db:migrate:status) - удалить модели:
rails d model user
- вдруг вспомнили, что вам нужна эта модель, но с другими полями
- создать модели:
rails g model user email group:references
- успешно перенести базу данных:
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