はじめに
Rails で既存カラムのdefault オプションを追加したい場面があったので備忘録です。
環境
- macOS 10.15.6
- Ruby 2.5.7
- Rails 5.2.3
参考URL
https://railsguides.jp/active_record_migrations.html
https://qiita.com/toda-axiaworks/items/dcc24c8e4b23318e37f4
http://tanihiro.hatenablog.com/entry/2014/01/10/182122
目標
- 既存カラムにdefault オプションのみ変更したい
- きちんとロールバックできるmigration ファイルを作成したい
ロールバック用のメソッドについて
-
up/down
メソッド -
change
メソッド
上記の2つのパターンでmigration ファイルを記述できますが、オプションの変更のみであればchange
メソッドの方がシンプルでロールバックも可能ということなので今回はchange
メソッドで進めます。
こちらの記事を参考にしました。ありがとうございました。
実装
Users テーブルのid カラムにdefault: 0
オプションを追加する想定です。
- migration ファイル作成
- migration ファイルにオプションを追加する処理を追加
- migrate して設定を反映させる
# 既存カラムのオプション変更用migratiton ファイル作成
$ rails g migration change_column_default_to_users
# migration ファイルでdefault値に0 を追加
class ChangeColumnDefaultToUsers < ActiveRecord::Migration[5.2]
def change
change_column_default :users, :id, from: nil, to: "0"
end
end
# migration ファイルの各項目の詳細
def change
change_column_default :テーブル名複数形, :カラム名, from: 変更前のdefault オプションの状態, to: 変更したいdefault オプション
end
default: true/false
, dafault: デフォルト値
などのオプション変更も可能です。
# 作成したmigration ファイルでmigrate
$ rails db:migrate
# migrate の履歴を確認
$ rails db:migrate:status
学び
- option を追加するだけだったのに以外にハマってしまった
- migration ファイルはロールバックできるのかを意識して書く事が重要
- オフィシャルのドキュメントはちゃんと読む事