【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
のデータを削除する場合には以下のようになります。
モデル名.find(id).destroy
Order.find(1).destroy
条件を指定して削除したい
今度はここからここまでのデータを消したいという条件付きで行いたい場合。
その消したい範囲を指定してあげれば希望の条件で削除可能です。
例えば、Order
モデルの中でid
が1..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
rails db:reset
ではschema.rb
からデータベースを復元し、seedも実行されます。
マイグレーションファイルを編集しても内容は反映されません。
rails db:migrate:reset
の場合は全マイグレーションファイルを順番に再実行します。
マイグレーションファイルの変更は反映されますが、seedは実行されません。
この辺はまだいまいちつかめていないので、また機会があればまとめたいと思います。
参考リンク
今回の記事に関連する公式ドキュメントや参考情報です。
- コマンドラインツール - Railsガイド - Rails consoleの公式ドキュメント
- Active Record の関連付け (アソシエーション) - Railsガイド - dependentオプションについての公式解説
- Active Record クエリインターフェイス - Railsガイド - destroy_allやwhereメソッドなどの公式リファレンス
最後まで読んでいただきありがとうございました。
当方プログラミング学習始めてもうすぐ2カ月の初学者です。
プラスの情報や修正点等ありましたら、ご連絡いただけますと幸いです🧎🏻♂️
Discussion