概要
みなさんこんにちはcandleです。今回はrailsのカラムの追加の仕方を紹介します。
本当にrailsは規約が多くて、多くて、なんでデータベースを直接いじれないんだと。
早速やっていきましょう。
前提
railsの環境が整っている。
テーブルを準備する
今回は下のようなテーブルを使用します。
スキャホールドでPostモデルを作ります。すると自動的にpostsテーブルが作られます。
rails g scaffold Post title:string description:text rake db:migrate
postsテーブルは下のようなカラム構造になります。
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(255), "description" text, "created_at" datetime, "updated_at" datetime
実際にレコードを挿入した感じが下のようになります。
現在はtitleとdescriptionというカラムがありますが、ここにtagというカラムをrailsから追加してみましょう。
railsからカラムを追加する
webアプリケーションフレームワークを使わずにwebアプリケーションを書いたことがある人ならわかると思いますが、データベースの操作は直接データベースをいじりますが、railsではrailsコマンドから操作します。
一般にカラムを追加するには下のコマンドを実行します。
rails generate migration Addカラム名Toテーブル名 カラム名:型名
「Addカラム名Toテーブル名」のカラム名とテーブル名は先頭を大文字にして書きます。スペースを挟んで小文字でカラム名を書き、コロンを入れて、カラムの型を記入します。
今回の事例にそって説明すると、すでにあるpostsテーブルにtagカラムを追加するにはしたのコマンドを入力します。
rails generate migration AddTagToPosts tag:string
多少ややこしいいですね。
実行しましょう。
migrationファイルが作られるので、それを確認します。
def changeの中に加える内容が書かれていない場合はrailsのコマンドが間違っています。
そういった時は、一度、作成したマイグレーションファイルを削除して、もう一度、railsコマンドを実行しましょう。
確認したら、この記述をデータベースに反映させます。
rake db:migrate
データベースを確認しましょう。
rails dbでデータベースに移動してみると下の図の様に、tagカラムが追加されています。
うまくいきました成功です。
railsからカラムを削除する
今度は、作成した、tagカラムを削除します。
一般にカラムを削除するには下のコマンドを実行します。
rails generate migration Removeカラム名Fromテーブル名 カラム名:型名
「Removeカラム名Fromテーブル名」のカラム名とテーブル名は先頭を大文字にして書きます。スペースを挟んで小文字でカラム名を書き、コロンを入れて、データベースのカラムの型を記入します。
例えば、先ほど作成したtagカラムを削除するには下のように記述します。
rails generate migration RemoveTagFromPosts tag:string
すると、マイグレーションファイルが作成されますので、それを確認します。
認したら、rake db:migrateコマンドでマイグレーションをデータベースに反映させます。
rake db:migrate
データベースを確認しましょう。
削除されていますね。
まとめ
他にもデータベースの変更や微妙なこともできるらしいです。