consoleでデータベース情報を削除する
はじめに
サンプルデータを作りすぎた。ごちゃごちゃしてるから減らしたい。ここからここのデータだけ、条件を指定して削除したい。そんなときに使える方法。
railsのconsoleでデータベースを削除
先日メンターさんがちょこちょこっとリモートでターミナル操作しているのを見て、そういう使い方もあったのかと新たな気づきがあったのでZennで初の投稿をしてみることに。
前提
・Ruby-3.1.2
・Rails 6.1.7.6
・OS: Windows 10
・開発環境: Cloud9
やってみよう
ターミナルで以下のコマンドを実行し、コンソール起動
$ 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
rails db:reset
ではマイグレーションファイルを編集しても内容は反映されずマイグレーションも実行しないが、rails db:migrate:reset
の場合はデータベースをDropした後、通常通りのdb:migrate
が実行される。
この辺まだいまいちつかめていないので、またまとめれたらいいな。
最後まで読んでいただきありがとうございました。
当方プログラミング学習始めてもうすぐ2カ月の初学者です。
プラスの情報や修正点等ありましたら、ご連絡いただけますと幸いです。
Discussion