2009-12-30 73 views
13

我有一堆导轨模型,我重新写入单个模型,以简化我的代码并减少不必要的表格。导轨删除旧模型迁移

我想知道什么是最好的方式来删除模型类和它的表是。我希望过去的迁徙仍然取得成功,但我不想留下空洞的模型。我是否必须手动删除引用这些模型的旧迁移,然后手动删除类文件?

有没有人有任何提示,以最好的方式来做到这一点?

回答

2

怎么样ruby script/destroy model?这应该照顾模型和迁移。

+0

那么将数据添加到此模型的后续迁移又如何?做脚本/销毁搜索迁移还是只删除创建表的最初一个? – brad 2010-01-02 21:04:11

+1

后来的迁移将需要他们自己的'script/destory migration migration_name'。思考这个问题的好方法就是使用genarate命令。所以,不,它也不会搜索改变相同模型的其他迁移。 – bobbywilson0 2010-01-03 03:41:56

+1

对,所以最后的答案是我可以使用脚本/销毁,但我还需要手动编辑任何可能包含这些删除模型的引用的迁移。非常感谢 – brad 2010-01-03 17:48:19

2

你可以看看这个rails guide。 但我建议,如果可能的话,你应该删除模型和模型的所有参考。这可能会在稍后节省时间,因为您不需要在代码库中维护死代码。

2

根据您的开发或生产有多远,您可能希望使用迁移来移除/备份数据或不迁移数据,从而安全地迁移模型。然后,随着bobbywilson0建议,使用

script/destroy model 

,或者如果你RSPEC什么

script/destroy rspec_model 

这将消除任何规格的测试也是如此。

或者你总是可以将它们拖到垃圾文件夹。

15

如果您想彻底摆脱的模型和其表做到这一点:

rails destroy model Name 
+7

这不会生成'remove_table'迁移,而是删除'create'而不是。所以模型仍然在'schema.rb'中... – 2014-04-01 14:33:05

6

的问题是有点陈旧了,但我只是做:

rails destroy scaffold <ModelName> -p 

-p标志显示“假装”输出,这对于查看会发生什么很有用。删除'-p'标志,结果将与输出匹配。这清理了整个M-V-C文件集合+测试+ js文件+原始迁移,没有问题。

我想如果你是一个喜欢手动编辑你的迁移并且在每个步骤中都包含多个步骤的人,那么失去原始迁移可能会破坏db:setup,因此买家要小心。保持一个动作==一个迁移文件应该避免这种潜在的困难。

9

所有的解决方案。

运行以下命令:

rails destroy model ModelName 
rails g migration DropTableModelName 

前者将产生一个新的迁移文件,它应该是这样的:

class DropTableModelName < ActiveRecord::Migration 
    def change 
    drop_table :model_name 
    end 
end 

现在运行db:migrate就大功告成了。

0

如果你宁愿有一个基于人工答案:

首先运行下面的命令找出你想要的迁移中删除:

rake db:migrate:status 

随意grep -i上太多,如果你是对你的命名方案很有信心。

记下所有“将x添加到模型名称”以及对您的模型进行的类似修改。这些可以使用删除:

rails d migration AddXToModelName 

这样做对每一个移民除了初始创建迁移。以下命令将处理初始创建迁移以及与该模型关联的文件:

rails d model ModelName