じぶんメモ

プログラミングのメモ、日常のメモとか。

Rails4のマイグレーションの書き方

新規にテーブル作成する場合

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.column :email, :string, null: false
      t.index :email
    end
  end
end

カラムの追加や削除を行う場合

changeメソッドを使用する。
changeメソッドを使用した場合、ロールバック時は、勝手に処理を反転して実行してくれる。
ただし、null許容など、オプションの情報までは戻せないため、
カラム情報、インデックスの変更には、changeメソッドは活用できない。
また、changeメソッドでカラムを削除する場合は、削除前のカラムの情報を引数として
与える必要がある。
changeメソッドロールバックができないものに対しては、up/downメソッドを使用する。

class AddNameToUsers < ActiveRecord::Migration
  def change
    # カラム追加。引数は、テーブル名、カラム名、型、オプション
    add_column :users, :name, :string, null:false

    # カラム名変更。引数は、テーブル名、変更前カラム名、変更後カラム名
    rename_column :users, :email, :mail_address

    # カラムの型をtextにし、nullを許容しないように変更。
    # 引数は、テーブル名、カラム名、変更後のカラムの設定
    change_column :users, :name, :text, :null => false 

    # インデックス追加。引数は、テーブル名、インデックスに使用するカラム名、オプション
    add_index :users, [:name], :unique => true

  end

   # カラムの型とnull許容を変更。
  def up
    # upメソッドに変更後の設定を記入する。
    change_column :users, :name, :text, :null => false
  end

  def down
    # downメソッドには、ロールバック時に使用する設定、つまり変更前の設定を記入する。
    change_column :users, :name, :string :null => true
  end

end

以下の記事が参考になりました。

tanihiro.hatenablog.com