我的应用程序中有一个Location模型,但后来我退回Git,当我还没有创建模型时,经过一段时间在另一个分支上工作后,我意识到模型已经无处可去,它仍然在我的架构中。我试图摆脱它,但它仍然突然冒出来,虽然我的应用程序中没有添加位置迁移文件。什么是摆脱它并清理schema.rb的最佳方法?
更新1
正在运行
rails销毁模型位置
给我
invoke active_record
remove /Users/denis/Desktop/migration/templates/create_table_migration.rb
remove app/models/location.rb
invoke test_unit
remove test/models/location_test.rb
remove test/fixtures/locations.yml
我可以无限期地运行它,它将始终给出相同的结果
运行此迁移:
class DropLocationsTable < ActiveRecord::Migration
def self.up
drop_table :locations
end
end
在rake db之后给出0结果:迁移位置再次出现在我的schema.rb中
更新2
rails db
SQLite version 3.7.12 2012-04-03 19:43:07
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> SELECT * FROM locations;
sqlite>
答案 0 :(得分:8)
如果你想真正删除它,你应该准备一个迁移来删除表。
如果您只是删除模型,ActiveRecord仍会在db中找到该表(这可能就是您在schema.rb
中看到它的原因 - 如果我说你的意思是文件而不是db模式)
编辑:
所以我试图重现这一点,结果我最终遵循了命令的顺序。
drop_table :locations
进行新迁移并运行它)rails destroy model location
(如果先破坏模型,则会出现错误)rails c
,以便Rails获取数据库更改并更新schema.rb
答案 1 :(得分:1)
像这样运行迁移
rake g migration DropLocations
这将创建一个迁移文件。编辑迁移文件,使其如此
class DropLocations&lt; ActiveRecord的::迁移 改变 drop_table:位置 结束 端
使用rake db:migrate运行迁移。这应该从schema.rb
中删除表答案 2 :(得分:0)
删除它。再次运行迁移。
答案 3 :(得分:0)
我发现使用Rails Console解决这个问题是最简单的。假设您要从博客应用程序中删除“评论”表。您可以通过从命令行(例如Terminal)执行以下任务来实现。
第一步:
$ rails console
第二步:
$ ActiveRecord::Migration.drop_table(:comments)
第三步:
$ rake db:migrate
去检查您的schema.rb以查看该表已被删除。