17
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

はじめに

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 ファイルはロールバックできるのかを意識して書く事が重要
  • オフィシャルのドキュメントはちゃんと読む事
17
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?