2009-12-30 76 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