ぼくらの勉強

ぼくらのための勉強をしていきます。

[Rails]不要になったmodelの削除方法

   

よくある間違い

不要になったUserモデルを削除したいと思った時に


$ rails destroy model users

としてしまうのは最初よくある間違い。

「一発で関連ファイルを全部消せて楽じゃん」と思ってしまいますが、実は悪手。このコマンドを実行した時の中身を見ればわかりますが


invoke active_record
 remove db/migrate/2017XXXXXXXXX_create_users.rb
 remove app/models/user.rb
 invoke test_unit
 remove test/models/user_test.rb
 remove test/fixtures/users.yml

このようにモデルを作成した時のmigrationファイルを直接消してしまっています。

少しDBをいじったことがある方はもうお分かりだと思いますがmigrationファイル自体を消すのは御法度。DBの整合性がとれなくなってあらゆるところでエラーが出ます。ダメ、絶対。

※ちなみにcontrollerの方はrails destory controller users……みたいな形で一括削除してしまっても特に問題なし。

スポンサーリンク

正しい手順

1.不要テーブルの削除migrationファイルの作成

対象テーブルを削除するmigrationファイルを作成しましょう。

例)Userモデル(usersテーブル)を削除する場合

$ rails generate migration drop_table_users

としてmigraitonファイルを作成し、該当ファイルのdef change部分に

def change
 drop_table :users
end

と追記。

2.migrationの実行


$ rails db:migrate

として、今作ったテーブル削除のmigrationファイルを実行しましょう。

3.関連ファイルの削除

以下の関連ファイルを手動でDeleteしましょう。

例)Userモデルを削除する場合

modelファイルの削除

app/models/user.rb

testファイルの削除

test/models/user_test.rb

fixturesファイルの削除

test/fixtures/users.yml

 

これで不要になったモデル、関連ファイルの削除は完了です。

ちょっと面倒ですけど頑張りましょう。次のRailsのアップデートで全部よしなにやってくれる機能が実装されることを祈ります