Railsでマイグレーションをする方法
マイグレーションスクリプトで作ったデータベースの値を変更したい場合、
カラムの追加
Modify + 大文字から始まるテーブル名のマイグレーションスクリプトを作る
ruby bin/rails g migration ModifyMembers
例えば、membersテーブルに、phoneカラムを追加したい場合、changeメソッド内に、add_columnメソッドを用いる。
add_column :members, :phone, :string
add_columnは、テーブル名、カラム名、カラムの型の順番で指定する。
class ModifyMembers < ActiveRecord::Migration def change add_column :members, :password, :string end end
そして、
ruby bin/rake db:migrate
を実行すると、カラムが追加している。
ruby bin/rake db:migrate:status
現在のマイグレーションのバージョンを知ることができる。
up印がついているのが実行済みのマイグレーション。
古いバージョンに戻すためには、
ruby bin/rake db:rollback
が使える。直前に行われたマイグレーションを1つだけ取り消す。
これをマイグレーションの「ロールバック」という。
一度に複数個のマイグレーションをロールバックしたい場合は、
ruby bin/rake db:rollback STEP=3
とSTEPオプションを付加する。
他にも、
カラム名の変更
rename_column(テーブル名,カラム名,新しい名前)
カラムの型の変更
change_column(テーブル名,カラム名,型,オプション)
カラムの削除
remove_column(テーブル名,カラム名)
change_columnとremove_columnはchangeメソッド内に入れてロールバックするとエラーになる。
ロールバックを行うなら、upメソッドとdownメソッドに2つを記述する。
upメソッドにマイグレーションを進める処理を書き、downメソッドに取り消す処理を書く。
def up rename_column :members, :name, :nickname change_column :members, :gender, :integer, null: false, default: 1 end def down rename_column :members, :nickname, :name change_column :members, :gender, :integer, null: false, default: 0 end