【エラー】SQLite3::SQLException: table "〇〇" already existsの解決法

はじめに

モデルを作成する際に、SQLite3::SQLException: table "〇〇" already existsというエラーに遭遇したのでその対処法。

SQLite3::SQLException: table "〇〇" already existsの解決法

commentsモデルを作成するためにrails db:migrateを実行した時に下記のエラーに遭遇しました。

#一部抜粋
SQLite3::SQLException: table "comments" already exists

エラーに書いてある通り、'commentsテーブルがすでにあるよ!'ってことでしたが、エディタ上にはcommentsモデルがなかったので調べてみました。

するとこのエラーは、カラム名とかを間違えてモデルを作成したときに、rails destroy model ~などでモデルを削除し、

再度rails g model ~で修正したモデル名と同じモデル名で作成してmigrateしたときなどに出るようです。

つまり、データベース上にはテーブルが残ったままなのが原因です。

データベース上の該当テーブルを消す

まずrails dbconsoleでデータベースにアクセスします。

$ rails dbconsole
~~~~~~
~~~~~~
~~~~~~
sqlite>

すると'rails console'のときと同じような感じになります。

そこで該当のテーブルがあるか確認し、テーブルから削除します。

sqlite>.table
posts               
comments              schema_migrations
sqlite> drop table comments

そして再度テーブルを確認。

sqlite>.table
posts               
schema_migrations

該当のテーブルが削除されたのを確認したら、

command + d などでターミナル画面に戻って、再度rails db:migrateを実行すると解決できます。