In my Rails (3.2) app, I have a bunch of tables in my database but I forgot to add a few not null constraints. I\'ve googled around but I can\'t find how to write a migration wh
You can also use change_column_null:
change_column_null :table_name, :column_name, false
1) FIRST: Add column with default value
2) THEN: Remove default value
add_column :orders, :items, :integer, null: false, default: 0
change_column :orders, :items, :integer, default: nil
If you are using it on a new create migration script/schema here is how we can define it
class CreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
t.string :name, null: false # Notice here, NOT NULL definition
t.string :email, null: false
t.string :password, null: false
t.integer :created_by
t.integer :updated_by
t.datetime :created_at
t.datetime :updated_at, default: -> { 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' }
end
end
end
For Rails 4+, nates' answer (using change_column_null) is better.
Pre-Rails 4, try change_column.