迁移后删除rails模型

对我来说,创建模型,运行迁移,销毁它,再次创建相同的模型报告SQLexception似乎很奇怪:

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是迁移ID(可以在rake db:migrate:status中看到)
  5. 删除模型: rails d model user
  6. 突然想起你需要这个模型,但是需要其他领域
  7. 创建模型: rails g model user email group:references
  8. 成功迁移数据库: rake db:migrate

 rails d model name 

这只是删除模型而不是您运行的迁移(在数据库中创建了表)。

如果要删除模型和表,则必须执行以下操作

 rake db:rollback rails d model name 

您删除了模型 – 这与回滚迁移的操作不同。

摧毁一个模型确实只做了这个; 它与迁移无关。

根据您的迁移错误,迁移文件一定有问题,而且还有引用创建名称表的文件。

请按照您的更改方法查看此文件。

迁移文件中的更改方法应该执行数据库代码,该数据库代码可以对数据库执行某些操作,并且更改上的相同代码应该是正确的回滚。

如果要在两者之间分开,则应将代码放在将对DB执行操作的up方法上,而在down方法上则执行相反的滚动操作。

我建议您删除迁移中的所有文件,包括导致问题的文件,并将其写入正确。

如果您需要帮助,请发布您的迁移文件。

另请参阅指南: http : //guides.rubyonrails.org/migrations.html