Rails 5:为什么删除特定的 table 不像输入 drop_table(users): 这样的命令那么简单?

Rails 5: Why dropping a specific table isnt as simple as typing a command like drop_table(users):?

我想摆脱一些开发实验,所以我开始破坏我的模型和控制器,然后我去了工作的数据库部分。查看以前的答案,例如 Rails DB Migration - How To Drop a Table? 和 API Rails 5 的指南,我意识到删除特定的 table 并不像 "rails destroy controller users" 那样简单。 .但这是为什么呢?

之前的 Whosebug post 建议 运行 bundle exec... before 追求控制器和模型,但我现在已经失去了那艘船。

简而言之:有人可以用一些技术洞察力描述我应该采取的步骤来删除残余 table 现在详细 并向我解释为什么此时删除特定 table 不是那么简单吗?

如能提供回滚实验的最佳实践指南,我们将不胜感激。

您可以按照与创建模型相反的顺序进行操作

例如

rails g model User name:string email:string:index

然后你 运行 迁移

rake db:migrate

现在,如果您需要销毁模型

首先,回滚迁移

rake db:rollback

然后使用

销毁它
rails d model User name:string email:string:index

@deepak 处理了 "detailed" 部分。我会回答 "why"

AND explain to me why is not as simple to delete a specific table at this point?

简单的回答:团队合作、自动化和文档。您的所有数据库更改都必须经过迁移。这样一来,当您的同事收到您的更改时,他们就不必追捕您并询问现在需要创建具有何种结构的具体 table 。他们只需要 运行 rake db:migrate 就是这样。

如果您还没有提交更改(table 仅在本地存在),那么回滚迁移并删除迁移文件是安全的。否则,如果table存在于其他环境中,则必须发布反向迁移。