I have the problem, that I have an migration in Rails that sets up a default setting for a column, like this example:
def self.up
add_column :column_name,
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
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
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)
Rails 4
change_column :courses, :name, :string, limit: 100, null: false