Rails の移行: 列のデフォルト設定を元に戻す 質問する

Rails の移行: 列のデフォルト設定を元に戻す 質問する

問題は、次の例のように、列のデフォルト設定を設定する Rails の移行があることです。

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

たとえば、後の移行でデフォルト設定を削除したい場合、Rails 移行を使用してそれをどのように実行すればよいでしょうか?

現在の回避策は、次のように Rails 移行でカスタム SQL コマンドを実行することです。

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

しかし、このアプローチは好きではありません。なぜなら、基礎となるデータベースがこのコマンドをどのように解釈するかに依存することになるからです。データベースが変更された場合、このクエリはおそらく機能しなくなり、移行が壊れるでしょう。では、Rails で列のデフォルト設定を元に戻す方法はありますか?

ベストアンサー1

レール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

おすすめ記事