Generate non-null field migration in Rails 8
I'm sure many of us are familiar with the Ruby on Rails migration generator...
rails generate migration add_name_to_widgets name
which generates a migration that looks like so:
class AddNameToWidgets < ActiveRecord::Migration[7.0]
  def change
    add_column :widgets, :name, :string
  end
end
Then to make the name column have a non-null constraint an addition of null: false would be needed:
class AddNameToWidgets < ActiveRecord::Migration[7.0]
  def change
    add_column :widgets, :name, :string, null: false
  end
end
However, now in Rails 8 an adjustment was made to allow this to be done from the generator shorthand
rails generate migration add_name_to_widgets name:string!
By adding the exclamation point after the column type a migration will now be generated as we wanted before but without the additional manual edit:
class AddNameToWidgets < ActiveRecord::Migration[8.0]
  def change
    add_column :widgets, :name, :string, null: false
  end
end
h/t Akshay Khot
Tweet