【Rails5】テーブルを作ったが、後からカラムにデフォルト値を設定したい時の方法
後からカラムにデフォルト値を設定したい時の方法をメモ。
手順
1. 修正用のマイグレーションファイルを作る。
$ rails g migration change_カラム名_of_テーブル名(複数形)
例 $ rails g migration change_status_of_projects
2. 1で作成したマイグレーションファイルを以下のように修正。
例として、
projectsテーブルの statusカラム
のデフォルト値に、openという値を設定するとします。
up => 修正後 down => 修正前 class ChangeStatusOfProjects < ActiveRecord::Migration[5.2] def up change_column :projects, :status, :string, default: 'open' end def down change_column :projects, :status, :string end end
3. db:migrateする
これでデフォルト値が設定できました。
up,downメソッドではなく、
changeメソッドを使うと、
db:migrate:redoした時にエラーを吐かれました。
This migration uses change_column, which is not automatically reversible. To make the migration reversible you can either: 1. Define #up and #down methods in place of the #change method. 247/5000 # この移行ではchange_columnを使用しますが、これは自動的に元に戻すことはできません。 # 移行を元に戻すには、次のいずれかを実行します。 # 1. #changeメソッドの代わりに#upおよび#downメソッドを定義します。
【おまけ】後からunique属性を追加する場合
$ rails g migration AddIndexToProjects
class AddIndexToProjects < ActiveRecord::Migration[5.2] def change add_index :projects, :XXX_id, unique: true add_index :projects, :YYY_id, unique: true end end
[参考] (https://qiita.com/dawn_628/items/13fa64dc6d600e921ce3)
[ドキュメント] (http://railsdoc.com/migration)