Ruby on rails 从schema.rb中删除表

Ruby on rails 从schema.rb中删除表,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我的应用程序中有一个位置模型,但后来我用Git后退了一步,当时我还没有创建该模型,然后在另一个分支上工作了很长时间后,我意识到该模型什么地方都没有,它仍然在我的模式中。我试图摆脱它,但它仍然突然出现,虽然我的应用程序中没有添加位置迁移文件。摆脱它并清理schema.rb的最佳方法是什么 更新1 运行 轨道破坏模型位置 给我 invoke active_record remove /Users/denis/Desktop/migration/templates/create_tab

我的应用程序中有一个位置模型,但后来我用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

把它拿走。再次运行迁移。

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

如果只删除模型,ActiveRecord仍将在db中找到该表(这可能就是为什么您在
schema.rb
中看到它-如果我说的没错,您指的是文件而不是db schema)

编辑:

所以我试着复制这个,结果我得到了以下命令的顺序

  • 首先删除表(使用
    drop\u table:locations进行新迁移并运行它)
  • 然后运行
    rails destroy model location
    (如果先销毁模型,则会出现错误)
  • 运行
    rails c
    ,这样rails将获取数据库更改并更新
    schema.rb

  • 像这样运行迁移

    rake-g迁移液滴定位

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

    类DropLocations
    使用rake db:migrate运行迁移。这将从您的模式中删除该表。rb

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

    第一步:

    $ rails console 
    
    第二步:

    $ ActiveRecord::Migration.drop_table(:comments)
    
    第三步:

    $ rake db:migrate
    

    检查schema.rb以查看表是否已被删除。

    是否已删除-弹出窗口返回您必须提交一次&对于allgit commit db/schema.rb-m“重新提交”Nop。如果我运行rake db:migrate after re-commit位置显示在schema.rb againyes中,则该文件就是。你说的是什么样的迁移?我想模型和db表不是自己创建的,对吧?您编写了一个Rails迁移来创建它们。因此,现在您需要创建另一个将删除该表的表。我对此非常陌生,因此非常感谢一个有用的指南链接。那么您首先是如何在db中获得这些表的?我已经用这些详细信息更新了我的问题,如果您执行了
    railsdb
    ,然后在db提示符
    中选择*fromslocations,请注意运行此迁移发生了什么?@MichaelSzyndel nothing(更新的问题)我只是试图重现,我必须先删除表,然后运行
    rails destroy model location
    ,否则会抛出错误。当我第一次迁移db以删除表,然后运行
    rails destroy model…
    然后运行
    rails c
    时,我在git diff中看到表已从模式中删除。所以我想你没有看到什么例外。试着按我做的顺序重新运行它。@MichaelSzyndel我按照你的命令,重新创建了迁移,它成功了!你能不能把它做成一个单独的答案,这样我就可以选择它了?我更新了我现有的答案!
    $ rake db:migrate