consoleでデータベース情報を削除する

2023/12/22 公開
# Ruby# Rails# Cloud9

サンプルデータを作りすぎた。ごちゃごちゃしてるから減らしたい。ここからここのデータだけ、条件を指定して削除したい。そんなときに使える方法。

railsのconsoleでデータベースを削除

先日メンターさんがちょこちょこっとリモートでターミナル操作しているのを見て、そういう使い方もあったのかと新たな気づきがあったのでZennで初の投稿をしてみることに。

前提

  • Ruby-3.1.2
  • Rails 6.1.7.6
  • OS: Windows 10
  • 開発環境: Cloud9

Warning データを削除する場合、dependent: :destroyなど関連付いたモデルがあるとそちらのデータも同時に消えてしまうので注意。

やってみよう

ターミナルで以下のコマンドを実行し、コンソール起動

$ rails c

rails cの c はconsoleの略。 このコマンドは削除だけでなく、サーバーのデータ変更やアプリケーションに定義したメソッドを試す時にも使える。

特定のデータを消したい

まずモデルの中でこのデータだけ消したいというときにはidを指定しdestroyを使って削除する。例えばOrderモデルで指定したidのデータを削除する場合には以下のようになる。

モデル名.find(id).destroy
Order.find(id).destroy

条件を指定して削除したい

今度はここからここまでのデータを消したいという条件付きで行いたい場合。その消したい範囲を指定してあげれば希望の条件で削除可能。例えばOrderモデルの中でid1..10までのものを消したいのであれば以下のようになる。

Order.where(id:1..10).destroy_all

データをすべて消したい

さらにそのモデルのデータぜんぶ消したい!というときにはdestroy_allを使って消すことができる。

Order.find(id).destroy_all

💡削除できたか確認したい、コンソール抜け出したいってときは

上記それぞれ実行した後、本当に削除できたか確認したいときにはモデル名.allとコンソールに打てば現状データベースがもっているそのモデル内にあるデータ一覧を出してくれる。 またやりたいことが終わってコンソールから抜け出したいときはexitと打ち込んでEnterを押すとコンソールが終了し、いつものターミナルの状態に戻る。

余談

◆ db:resetやdb:migrate:resetという手も

これらはコンソールで行うものではないが、以下2つのコマンドでもデータベースの削除は可能。

$ rails db:reset
$ rails db:migrate:reset

Warning ただしこのコマンドを実行するとテーブルが一旦全て削除される。

rails db:resetではマイグレーションファイルを編集しても内容は反映されずマイグレーションも実行しないが、rails db:migrate:resetの場合はデータベースをDropした後、通常通りのdb:migrateが実行される。

この辺まだいまいちつかめていないので、またまとめれたらいいな。