見出し画像

作成したmodelを削除する方法(rails)

モデル名を間違えたりした時に、再作成したい時にmodelを削除するかと思う。よく使う技術なので、まとめるため記載する。

rails db:migrate:status

基本的にモデルを削除するときは以下のコマンドで実行ができる
rails destroy model モデル名
ただ注意としてモデルを削除するときは事前に以下のコマンドを実行して、状態を確認してから実行する。
rails db:migrate:status
このコマンドを実行すると以下のような結果が表示される
Status Migration ID Migration Name
--------------------------------------------------
up 20190516135900 Create users
up 20190517140023 Add password digest to users
up 20190607063428 Create contents
Statusがupのときはモデルを削除してもmigrationには状態が残ったままになるので、のちにrails db:migrateを行なってもエラーが起きてしまう。基本的にはNO Fileのエラーが表示されるかと思う。(私の場合はそうでした。)
NO Fileのエラーが出たときは以下を参考に削除ができます。
参考
https://remonote.jp/rails-migrate-status-no-file

rails db:rollback

モデルを削除するためには、migrationから無くさないといけないため、データベースの状態を戻す必要がある。
戻す方法はいくつかあるが消したいモデルは基本的に一つ前の状態のものが多いかと思うので、一例を記載する。
以下の状態の時のContentモデルを削除したいときを例にする。
Status Migration ID Migration Name
--------------------------------------------------
up 20190516135900 Create users
up 20190517140023 Add password digest to users
up 20190607063428 Create contents

Statusがupのままなので、状態を変更するため以下のコマンドを実行する
rails db:rollback
そうするとmigrationは以下のようになる。
Status Migration ID Migration Name
--------------------------------------------------
up 20190516135900 Create users
up 20190517140023 Add password digest to users
down 20190607063428 Create contents

状態がdownになることでデータベースから削除されることとなり、モデルを削除することができる。ただ、データベースの状態を戻すときはversionを指定して戻したりすることができるが、作成した状態から戻していくことしかできないため、途中のmigrationの状態を消すことができない。今回の場合だと、20190517140023 Add password digest to usersのみを消すとうはできたないため、注意が必要である。
モデルを削除した後は、rails db:migrateを行うことでデータベースの状態もモデルが削除された状態になる。

モデルを作成した後に、rails db:migrateをしてしまうとデータベースに反映されてしまうため、削除する時にはなれないと大変でした。NO FILEになってしまうと結構消すのが面倒なため、気をつけたいと思う。データベースは何かと整合性を保つため、削除するのも一苦労でした。コントローラを削除するのは楽だなーと思ったこの頃です。

この記事が気に入ったらサポートをしてみませんか?