Moosa
Moosa

Reputation: 3216

Removing default value from Rails Migration

I found several similar questions about editing a migration but couldn't figure this one out. I did a rails migration, then opened the migration file and added a default value option to the field. Then ran rake db:migrate. The default value populates as intended. Then a few migrations later, I decided that I wanted to remove the default value option. How do I do that?

If this was the last migration I did, I would use db:rollback and recreate but since was done a few migrations ago, I'm not sure how to fix this.

Appreciate the help.

Upvotes: 53

Views: 26253

Answers (2)

Tom Lord
Tom Lord

Reputation: 28305

Rails 5+

Passing a hash containing :from and :to will make this change a reversible migration:

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

Therefore I would recommend using this format where possible.

Upvotes: 51

sevenseacat
sevenseacat

Reputation: 25049

Create a new migration and use change_column_default.

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

Sets a new default value for a column:

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

Setting the default to nil effectively drops the default:

change_column_default(:users, :email, nil)

Upvotes: 98

Related Questions