rails sqliteでのカラム削除の方法
Progate Rails 9章写経中、postsテーブルにuser_idというカラムを追加するとこで詰まったのでメモ。コードは合ってるのにどうも上手く動かんなーと思ってたら、どうやらカラムを追加するテーブルを間違えてたようです。
本来はuser_idというカラムをpostsテーブルに追加するところ、usersテーブルに追加してたようで、一度カラムの削除が必要になりました。
最初はDB側からコマンドで削除しようとしたのですが、SQLiteだとカラムを削除するコマンドが無いようで、テーブルをコピーしたり色々必要そうでめんどくせーとか思ってたら、Rails側でDBいじれるの忘れてました。。Railsすげー。
以下、やり方です。
1.ターミナル上で、こちらを入力。
rails generate migration Removeカラム名Fromテーブル名 カラム名:型名
(カラム名とテーブル名の先頭は大文字から始める!)
削除するのにgenerate?と違和感を感じますが、あくまでDBを操作するためのmigrationファイルをgenerateするためです。
2. rails db:migrateでマイグレーションファイルを反映
このコマンドをターミナルで入力することで、さきほどmigrationファイルに書き込んだ変更内容をDBに反映させます。
3.完了!!
実際に試してみましょう。
赤丸のuser_idが今回消したいカラムです。
ターミナルから、コマンド入力。
すると、こんなマイグレーションファイルが生成されます。
なんかいかにも削除してくれそうな感じです。頼もしい。
ちなみに、generateコマンドを入力ミスすると、changeメソッドの中身が空のマイグレーションファイルが生成されるので、一度中身を確認してからdb:migrateするといいかも。
からの、db:migrate。
これで出来たはず!もう一度DBの中身を確認してみます!
passwordカラムの横にあったuser_idカラムが消えました!!やったー!!!
比較
変更前:
変更後: