consoleでデータベース情報を削除する
サンプルデータを作りすぎた。ごちゃごちゃしてるから減らしたい。ここからここのデータだけ、条件を指定して削除したい。そんなときに使える方法。
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
モデルの中でid
が1..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
が実行される。
この辺まだいまいちつかめていないので、またまとめれたらいいな。