Help us understand the problem. What is going on with this article?

Rails で既存カラムにdefault オプションを追加したい

はじめに

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 オプションを追加する想定です。

  1. migration ファイル作成
  2. migration ファイルにオプションを追加する処理を追加
  3. 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 ファイルはロールバックできるのかを意識して書く事が重要
  • オフィシャルのドキュメントはちゃんと読む事
karlley
webエンジニアへの転職を目指してRuby/Railsを中心に勉強中。 独学で勉強してるので記事への指摘やコメントなどはどんどんお願いします!!
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away