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が今回消したいカラムです。

f:id:takara1356:20181228015041p:plain

 

ターミナルから、コマンド入力。

f:id:takara1356:20181228015215p:plain

すると、こんなマイグレーションファイルが生成されます。

f:id:takara1356:20181228015513p:plain

なんかいかにも削除してくれそうな感じです。頼もしい。

ちなみに、generateコマンドを入力ミスすると、changeメソッドの中身が空のマイグレーションファイルが生成されるので、一度中身を確認してからdb:migrateするといいかも。

からの、db:migrate。

f:id:takara1356:20181228015341p:plain

これで出来たはず!もう一度DBの中身を確認してみます!

f:id:takara1356:20181228020043p:plain

passwordカラムの横にあったuser_idカラムが消えました!!やったー!!!

比較

変更前:

f:id:takara1356:20181228014719p:plain

変更後:

f:id:takara1356:20181228020043p:plain