🗑️

【Rails】consoleでデータベース情報を削除する方法

に公開

先日メンターさんがターミナル操作をしているところを見て、そういう使い方もあったのかと新たな気づきがあったので、Zennで初の投稿をしてみることにしました。
サンプルデータを作りすぎた。ごちゃごちゃしてるから減らしたい。ここからここのデータだけ条件を指定して削除したい。そんなときに使える方法をまとめてみます。

前提

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

始める前に

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

やってみよう

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

$ rails c

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

特定のデータを消したい

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

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

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

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

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

データをすべて消したい

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

console
Order.destroy_all

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

上記それぞれ実行した後、本当に削除できたか確認したいときにはモデル名.allとコンソールに打ちます。
すると、現状データベースがもっているそのモデル内にあるデータ一覧を出してくれます。

また、やりたいことが終わってコンソールから抜けたいときにはexitと打ち込んでEnterを押すとコンソールが終了し、いつものターミナルの状態に戻ります。

余談

☝🏻db:resetやdb:migrate:resetという手も

これらはコンソールで行うものではありませんが、以下2つのコマンドでもデータベースの削除は可能です。

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

rails db:resetではschema.rbからデータベースを復元し、seedも実行されます。
マイグレーションファイルを編集しても内容は反映されません。

rails db:migrate:resetの場合は全マイグレーションファイルを順番に再実行します。
マイグレーションファイルの変更は反映されますが、seedは実行されません。

この辺はまだいまいちつかめていないので、また機会があればまとめたいと思います。

参考リンク

今回の記事に関連する公式ドキュメントや参考情報です。


最後まで読んでいただきありがとうございました。
当方プログラミング学習始めてもうすぐ2カ月の初学者です。
プラスの情報や修正点等ありましたら、ご連絡いただけますと幸いです🧎🏻‍♂️

Discussion