从schema.rb中删除表

时间:2013-08-30 12:42:18

标签: ruby-on-rails ruby-on-rails-4

我的应用程序中有一个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> 

4 个答案:

答案 0 :(得分:8)

如果你想真正删除它,你应该准备一个迁移来删除表。

如果您只是删除模型,ActiveRecord仍会在db中找到该表(这可能就是您在schema.rb中看到它的原因 - 如果我说你的意思是文件而不是db模式)

编辑:

所以我试图重现这一点,结果我最终遵循了命令的顺序。

  1. 首先删除该表(使用drop_table :locations进行新迁移并运行它)
  2. 然后运行rails destroy model location(如果先破坏模型,则会出现错误)
  3. 运行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以查看该表已被删除。