問題は、次の例のように、列のデフォルト設定を設定する 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