k01ken’s b10g

He110 W0r1d!

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