1. ホーム
  2. ruby-on-rails

[解決済み] Railsのマイグレーション。カラムのデフォルト設定を元に戻す

2022-04-14 07:40:20

質問

Railsのマイグレーションで、次の例のようにカラムのデフォルト設定を設定する問題があります。

def self.up
  add_column :column_name, :bought_at, :datetime, :default => Time.now
end

もし、そのデフォルト設定を後のマイグレーションで落としたい場合、rails migrations を使ってどのようにすればいいでしょうか?

私の現在の回避策は、railsのマイグレーションで、以下のようなカスタムSQLコマンドを実行することです。

def self.up
  execute 'alter table column_name alter bought_at drop default'
end

しかし、私はこの方法が好きではありません。なぜなら、基礎となるデータベースがこのコマンドをどのように解釈しているかに依存することになってしまうからです。データベースを変更した場合、このクエリはもう動作しないかもしれませんし、マイグレーションが壊れてしまうかもしれません。そこで、railsでカラムのデフォルト設定の取り消しを表現する方法はないでしょうか?

解決方法は?

Rails 5+

def change
  change_column_default( :table_name, :column_name, from: nil, to: false )
end

Rails 3とRails 4

def up
  change_column_default( :table_name, :column_name, nil )
end

def down
  change_column_default( :table_name, :column_name, false )
end