我觉得很奇怪,创建模型、运行迁移、销毁它,然后再次创建相同的模型会报告 SQL 异常:
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.
也许,我做错了什么?迁移有删除表的代码 - 它只能用于回滚吗?
Solution
删除模型和数据库表并生成新的非常简单:
- 创建模型:
rails g model user name
- 进行迁移:
rake db:migrate
- 实现一些东西,突然想起需要删除模型
- 恢复特定迁移:
rake db:migrate:down VERSION=20130417185814
, where 20130417185814
是迁移ID(可以在rake db:migrate:status中看到)
- 删除型号:
rails d model user
- 突然想起你需要这个模型,但是用其他领域
- 创建模型:
rails g model user email group:references
- 数据库迁移成功:
rake db:migrate
rails d model name
这只会删除模型,而不是您已运行的迁移(它在数据库中创建了表)。
如果要删除模型和表,则必须执行以下操作
rake db:rollback
rails d model name
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)