Você está falhando na validação aqui, é por isso.
Por exemplo, a senha é muito curta.
Você pode propagar a exceção fazendo isso:
u.save!
o que resulta, por exemplo:
ActiveRecord::RecordInvalid: Falha na validação: A senha é muito curta (o mínimo são 10 caracteres)
de /home/robert/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/activerecord-7.0.8.1/lib/active_record/validations.rb:80:in `raise_validation_error'
Uma maneira mais rápida de chegar a isso teria sido adicionar um ponto de exclamação após o create:
u = User.create!(username: "dunderhead", email: "dunderhead@live.com", password: "password")
Um ID não será atribuído até que você forneça ao objeto atributos totalmente válidos, seja na criação ou ao salvar após corrigi-los.
Somente quando você tiver um objeto instanciado poderá executar métodos nele.