2

我的应用程序中有一个 Location 模型,但是当我还没有创建模型时,我使用 Git 后退了一步,然后在另一个分支上工作了一段时间后,我意识到该模型无处可去,它是仍然在我的架构中。我试图摆脱它,但它仍然突然出现,尽管我的应用程序中没有添加位置迁移文件。摆脱它并清理我的 schema.rb 的最佳方法是什么?

更新 1

跑步

导轨破坏模型位置

给我

  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

给出 0 结果,在 rake db:migrate 之后位置再次出现在我的 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

4 回答 4

8

如果您想真正删除它,您应该准备迁移以删除表。

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

编辑:

所以我试图重现这一点,结果我得到了以下命令顺序。

  1. drop_table :locations首先删除表(使用并运行它进行新迁移)
  2. 然后运行rails destroy model location(如果你先破坏模型,你会得到一个错误)
  3. 运行rails c,以便 Rails 获取数据库更改和更新schema.rb
于 2013-08-30T13:01:33.353 回答
2

我发现使用 Rails 控制台来解决这个问题是最简单的。假设您想从博客应用程序中删除“评论”表。您可以通过从命令行(例如,终端)执行以下任务来做到这一点。

第一步:

$ rails console 

第二步:

$ ActiveRecord::Migration.drop_table(:comments)

第三步:

$ rake db:migrate

去检查您的 schema.rb 以查看该表已被删除。

于 2019-02-11T04:31:21.747 回答
2

像这样运行迁移

rake g 迁移 DropLocations

这将创建一个迁移文件。编辑迁移文件看起来像这样

类 DropLocations < ActiveRecord::Migration def change drop_table :locations end end

使用 rake db:migrate 运行您的迁移。这应该从您的 schema.rb 中删除表

于 2015-09-25T19:07:58.207 回答
0

只需将其删除。再次运行迁移。

于 2013-08-30T12:43:39.057 回答