web-dev-qa-db-ja.com

Rails Migrationからデフォルト値を削除する

移行の編集に関して同様の質問をいくつか見つけましたが、これを理解できませんでした。 Railsマイグレーションを実行してから、マイグレーションファイルを開き、フィールドにデフォルト値のオプションを追加しました。次に、rake db:migrateを実行しました。デフォルト値が意図したとおりに入力されます。その後、いくつかのマイグレーションを行います。デフォルト値のオプションを削除したいのですが、どうすればよいですか?

これが最後の移行だった場合、db:rollbackを使用して再作成しますが、数回前の移行を行ったため、これを修正する方法がわかりません。

ヘルプに感謝します。

29
Moosa

新しい移行を作成し、change_column_default

http://apidock.com/Rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_column_default

列の新しいデフォルト値を設定します。

change_column_default(:suppliers, :qualification, 'new')
change_column_default(:accounts, :authorized, 1)

デフォルトをnilに設定すると、デフォルトが実質的に削除されます。

change_column_default(:users, :email, nil)
46
sevenseacat

Rails 5以降

:from:toを含むハッシュを渡すと、この変更がreversibleになります。

change_column_default(:posts, :state, from: nil, to: "draft")

したがって、可能な場合はこの形式を使用することをお勧めします。

14
Tom Lord