Rails migrations: Undo default setting for a column

ID : 20103

viewed : 24

Tags : ruby-on-railsrails-migrationsruby-on-rails

Top 5 Answer for Rails migrations: Undo default setting for a column

vote vote

97

Rails 5+

def change   change_column_default( :table_name, :column_name, from: nil, to: false ) end 

Rails 3 and Rails 4

def up   change_column_default( :table_name, :column_name, nil ) end  def down   change_column_default( :table_name, :column_name, false ) end 
vote vote

80

Sounds like you're doing the right thing with your 'execute', as the docs point out:

change_column_default(table_name, column_name, default) 

Sets a new default value for a column. If you want to set the default value to NULL, you are out of luck. You need to DatabaseStatements#execute the appropriate SQL statement yourself. Examples

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

73

The following snippet I use to make NULL columns NOT NULL, but skip DEFAULT at schema level:

def self.up   change_column :table, :column, :string, :null => false, :default => ""   change_column_default(:table, :column, nil) end 
vote vote

63

Rails 4

change_column :courses, :name, :string, limit: 100, null: false 
vote vote

51

Top 3 video Explaining Rails migrations: Undo default setting for a column

Related QUESTION?