ホーム DoRuby migrationファイルの記法メモ

migrationファイルの記法メモ

この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。

Ruby on Rails でDBのテーブル作成・カラム編集などに使う

migrationファイル。ファイルを作っておけば「rake db:migrate」 のコマンドで色々な対応が出来ますが、

それぞれ書き方があり、今までにすこし引っかかったものを中心にまとめてみました。

 change と up/down

changeとup/downはどちらもmigration実行時・ロールバック時の処理を記述するメソッドです。

changeの場合

class AddNameToPlayers < ActiveRecord::Migration
  def change
    add_column :players, :name, :string
  end
end  

up/downの場合

class AddNameToPlayers < ActiveRecord::Migration
  def up
    add_column :players, :name, :string
  end

  def down
    remove_column :players, :name
  end
end  

up/downはそれぞれ実行時・ロールバック時の操作をかく必要がありますが、

changeは実行時だけの操作を書くと、ロールバック時に処理を反転させて実施してくれます。とっても便利です。

なので、全部changeで書いていた所、ある時エラーになりました。

class RemoveNameToPlayers < ActiveRecord::Migration
  def change
    remove_column :players, :name    <- ロールバックできない
  end
end  

カラムのremove処理などは、changeだけだと、カラムの型情報等が含まれないため、反転出来ないのが原因でした。

removeのmigrationの時はup/downを使うようにしましょう。

 定型外の型

マイグレーションで使えるデータ型には以下のようなものが用意されています。

integer
float
string
text
date
time
boolean
...  

ただある時、integer型のカラムをBIGINT型に変更したい、となったとき、

bigintはそのままmigrationファイルに記述してもダメでした。

  def change
  	change_column :bank, :money, "BIGINT UNSIGNED"
  end 

 カラム位置指定

普通にmigrationファイルでカラムを増やすと、どんどん最後尾にカラムが足されて行きます。

その際、「このカラムは、カラムAとカラムBの間に入れたい!」となった時。

afterを使いました。

  def change
    add_column :test_table, :insert_column, :string, after: "column_a"
  end

このようなmigrationファイルにすると、column_aの後にinsert_columnが追加されます。

おまけ コメント

DBが増えてくると、このカラムは何のカラムだったか、と分からなくなってきます。

migrationファイルから、コメントを付けておく事が出来ます。

  def change
    add_column :test_table, :encrypted_password, :string, comment:"パスワード"
    add_column :test_table, :name, :string, comment:"ログインアカウントネーム"
  end

このようなmigrationファイルを作り、DB構造を見てみると、

各カラムにコメントが入ります。

記事を共有

最近人気な記事