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

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

先日メンターさんがターミナル操作をしているところを見て、そういう使い方もあったのかと新たな気づきがあったので、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のデータを削除する場合には以下のようになります。

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

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

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

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

データをすべて消したい

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

Order.destroy_all

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

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

余談

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

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

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

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

rails db:resetではschema.rbからデータベースを復元し、seedも実行されます。 マイグレーションファイルを編集しても内容は反映されません。 rails db:migrate:resetの場合は全マイグレーションファイルを順番に再実行します。 マイグレーションファイルの変更は反映されますが、seedは実行されません。 この辺はまだいまいちつかめていないので、また機会があればまとめたいと思います。

参考リンク

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


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