那怎么会发生这种情况,你知道有什么方法可以在提交中恢复并完全删除之前创建的表吗?
答案 0 :(得分:1)
即使您删除了迁移文件,表格也已创建。因此,您可以创建迁移以删除表,也可以使用当前架构重新创建数据库,而当前架构没有类别迁移。
原因是 - 一旦迁移运行,就会创建表。无论应用程序中的文件是什么,它都将保留在那里,直到它被删除或更改为止。因此,您必须创建一个迁移以删除它,然后在创建它之后运行它。
创建迁移
rails g migration drop_category_table
文件内
def change
drop_table :category
end
答案 1 :(得分:1)
如果使用git rollbacks无法解决这个问题,我建议通过迁移删除表。在您的情况下,您可以执行以下操作:
在终端/命令中:rails g migration DropCategoryTable
class DropCategoryTable < ActiveRecord::Migration
def up
drop_table :category
end
def down
# recreate table logic here
end
end
然后返回终端/命令:rails db:migrate
答案 2 :(得分:0)
您的数据库是应用程序的独立实体,因此它的状态不是版本控制或git repo的一部分...不存在巧妙的钩子来帮助您在还原提交时还原数据库,因为还原提交将仅删除模型和迁移文件,而不删除数据库本身中的表
因此,在还原提交之前,您必须回滚数据库迁移。
rake db:rollback
在git恢复之前。
结论:要删除表格,您有两个选择之一
第一选项
“回滚以从数据库+ git日志中删除模型,以获取您拥有的所有git版本的列表,然后选择其中一个+检出该git的较早版本并创建一个分支,该分支将删除左侧的迁移和模型删除模型的文件”
rake db:rollback
git log
git checkout -b old-state 0d1d7fc32
第二个选项
“回滚以删除模型+ Rails销毁以删除左侧的迁移和模型文件,而无需检出已删除文件的旧版git”
rake db:rollback
rails destroy model <model_name>