私には問題があります。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
しかし、私はこのアプローチが好きではありません。なぜなら、私は今、基になるデータベースがこのコマンドをどのように解釈しているかに依存しているからです。データベースが変更された場合、このクエリはおそらく機能しなくなり、移行は中断されます。だから、レールの列のデフォルト設定の取り消しを表現する方法はありますか?
def change
change_column_default( :table_name, :column_name, from: nil, to: false )
end
def up
change_column_default( :table_name, :column_name, nil )
end
def down
change_column_default( :table_name, :column_name, false )
end
サウンド あなたの「実行」で正しいことをしているように、ドキュメントが指摘しているように:
change_column_default(table_name, column_name, default)
列の新しいデフォルト値を設定します。 デフォルト値をNULLに設定する場合、運が悪い。 DatabaseStatements#適切なSQLステートメントを自分で実行する必要があります。例
change_column_default(:suppliers, :qualification, 'new') change_column_default(:accounts, :authorized, 1)
NULL
列を作成するために使用する次のスニペットNOT NULL
が、スキーマレベルでDEFAULT
をスキップします。
def self.up
change_column :table, :column, :string, :null => false, :default => ""
change_column_default(:table, :column, nil)
end