Tatehito's Programming Blog

プログラマによる技術寄り日記ブログ

migrationファイルの生成・記述方法のまとめ【随時更新】

Railsにおけるmigrationを使ったテーブル定義の変更方法は、Qiitaを筆頭に、ちょっとググればすぐ出てきます。大変ありがたいのですが、一向にmigrationファイルの書き方を覚えられないし、毎回ググるのも面倒になってきたので、「自分のブログを見れば全部わかる」状態を目指して、まとめることにしました。

まとめといっても、実際に自分が使ったことのあるものだけを記載しています。随時更新していきます。

既存テーブルに対する変更

カラムを追加する

ファイル生成コマンド
rails g migration AddColumnTo[クラス名] [カラム名]:[データ型]
※追加するカラムはスペース区切りで複数指定可

# migrationファイル
def change
  # add_column :対象テーブル名, :対象カラム名, :型
  add_column :users, :age, :integer
end

カラム名を変更する

ファイル生成コマンド
rails g migration Rename[変更前のカラム名]ColumnTo[変更後のカラム名]

# migrationファイル
def change
  # rename_column :[対象テーブル名], :[変更前のカラム名], :[変更後のカラム名]
  rename_column :users, :uid, :user_id
end

カラムのデータ型を変更する

ファイル生成コマンド
rails g migration ChangeDatatype[カラム名]Of[テーブル名]

# migrationファイル
def change
    # change_column :対象テーブル名, :対象カラム名,  :変更後のデータ型
    change_column :users, :name, :string
end

※ただし、PostgreSQLでintegerやboolean型に変更するとPG::DatatypeMismatch: ERRORというエラーが起きる場合があります。change_columnメソッドを以下のようにすると解消します。

change_column :users, :age, 'integer USING CAST(age AS integer)'

カラムにオプションを設定する

デフォルト値

ファイル生成コマンド
rails g migration AddDefalutValue[カラム名]Of[テーブル名]

# migrationファイル
def change
    # change_column :対象テーブル名, :対象カラム名, :型, default: デフォルト値
    change_column :users, :age, :integer, default: 20
end