【Rails基礎】データベースのカラムを追加・削除する方法




Railsのデータベースにカラムを追加・削除したい!

Railsアプリを作っていると

すでに作ってしまったテーブルのデータベースにカラムを追加したい

または削除したい

という時がありますよね。

 

例えば、usersテーブルに

  • name
  • email
  • nickname

というカラムがあったけど、

「画像のカラム(image)も作ってみたいなー」

とか

「ニックネームのカラム(nickname)いらねーなー」

というシチュエーションですね。

 

そんな時に備えてマスターしておきたいのが、

Railsでテーブルのカラムを追加・削除する方法

です。

今日はこちらの方法を紹介しますよ。

※ 利用環境は以下の通りです。

Rails バージョン 2.5.0
Ruby バージョン 5.2.4.1

 

Railsでカラムを追加する方法

まずはカラム追加する方法ですね

 

マイグレーションファイルを作成

まずはデータベースをいじっていく前に、マイグレーションファイルを生成しましょう。

マイグレーションファイルとは、データベースを作成または変更する際に必要なファイルです。

データベースの設計図、下書きなどと例えれていますね。

 

Railsではいきなりデータベースの中身を編集するのではなく、一旦マイグレーションファイルを作り、そこにへ変更の要件を書き込み、実行してデータベースの中身を書き換えていきます。

そのマイグレーションファイルを作るコマンドはズバリ、

です。

 

例えば、

とすれば、「add_image_to_users」が名前についたマイグレーションファイルが誕生するのです。

マイグレーションファイルの名前はぶっちゃけなんでもいいんですが、名前に

  • テーブル名
  • カラム名

を含ませておくと、のちのちマイグレーションファイルを見返した時にその役割というか生誕の理由を察しやすくなるでしょう。ただ、ネーミングは自由で規則はありません。

 

マイグレーションファイルを編集する

さっきのコマンドで作成したマイグレーションファイルを編集していきます。

マイグレーションファイルの場所は、Railsアプリのファイル階層の中でいうと

db > migrate

ですね。

 

じつは、さきほど誕生したマイグレーションファイルは、肝心の部分は白紙。

つまり、自分でどのような変更をテーブルに加えるのかを書かなければなりません。

具体的にいうと、

というchangeメソッドの中身を書いていきます。

 

カラムを追加したい時は、changeメソッドの中に、

add_column :テーブル名, :カラム名, :データ型

と記載しましょう。

例えば、usersテーブルにimageカラム(string型)を追加したいときは、こんな感じで書きますね。

 

マイグレーションファイルを実行

さて、あとはマイグレーションファイルを実行するだけ。

実行のコマンドは、

ですよ。コマンドラインで発動しちゃってください。

 

 

カラムを削除したい時はどうする??

以上、Railsのカラムに追加するをカラムを追加する方法でした。

それでは削除する方法はどうなんでしょうかね。

 

じつは、削除方法も簡単。

さっきのステップ2で「メソッド名を変えるだけ」です。

お察しの通り、add_columnではなくremove_columnにすればいいのです。

だから、先ほどの例で出したchangeメソッドはカラム削除の場合はこうなります。

これでマイグレーションファイルを同じように

で実行してあげると、指定したカラムを削除できますね。

メソッドの名前を変えるだけですからわかりやすい。

 

 

複数のカラムを同時に追加・削除したい時はどうする??

が、しかし時には、

複数のカラムを1つのマイグレーションファイルで追加・削除したい時がありますよね。

なんせ、1つのカラムごとに1マイグレーションファイルを作っていたら日が暮れちゃいますからね。

そんな時は、シンプルに、

changeメソッドの中に一気にカラム追加の命令文を書いておけば大丈夫です。

 

例えば、

としてやると、imageカラムだけなく、birthdayカラムまで同時にusersテーブルに追加できちゃうわけです。

この複数の方法は何もadd_columnだけでなく、remove_columnを混ぜてもいいし、検証してみたら違うテーブルのコマンドを織り交ぜても通りました。

カラムの追加・削除という作業はRailsでアプリを作ると必要になってくる作業なのでマスターしておきましょう。

 

それでは!

Lin

 

【参考記事】

Pocket
LINEで送る

コメントを残す

メールアドレスが公開されることはありません。