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