We are referencing a User constant which may not exist when this migration
is run in the future.
While migrations contain the full history of the database schema for a
project, they are always run in the context of the current codebase.
Referencing a model constant, while tempting, can lead to issues down the
road.
Instead, you should use SQL directly to make the change since the table that
the model wraps is guaranteed to be present when the migration is run, unlike
the model itself.
class AddAdminFlagToUsers < ActiveRecord::Migration
  def up
    add_column :users, :admin, :boolean, default: false
    connection.update(<<-SQL)
      UPDATE users SET admin = 'f'
    SQL
    change_column_null :users, :admin, false
  end
  def down
    remove_column :users, :admin
  end
end
The updated version of the migration uses the connection object to execute
a raw SQL statement directly against the database, additionally using a
[heredoc][] to define the SQL statement.
Note - we also need to create the column in two steps since it can't be
created with null: false as the existing rows will not pass this constraint.
[heredoc]: http://ruby-doc.org/core-2.2.0/doc/syntax/literals_rdoc.html#label-Here+Documents