Corrigir o roteamento para URL curto por nome de usuário no Rails

Eu estou tentando substituir visualizações de perfil do usuário do tipo

/users/1

com

/username

Estou ciente que isso significa que precisarei verificar colisões de vários tipos. Eu consultei as seguintes perguntas SO semelhantes:

Ruby on rails roteamento correspondente nome de usuáriopersonalizar o URL do rails com nome de usuárioRoteamento no Rails, tornando o nome de usuário um URL:erro de roteamento com: nome de usuário no url

Aqui estão as várias definições de rotas rotas.rb com falha que eu tentei e erros associados:

match "/:username" => "users#show", via: "get"

Aqui está o erro:

ActiveRecord::RecordNotFound in UsersController#show

Couldn't find User without an ID

app/controllers/users_controller.rb:7:in `show'

Aqui está o meu users_controller correspondente:

6 def show
7   @user = User.find(params[:id])
8 end

match "/:username" => 'users#show', :as => :profile

O mesmo erro acima.

match "/:username", :controller => "users/:id", :action => 'show'

 Routing Error

 uninitialized constant Users

 Try running rake routes for more information on available routes.

match '/:username', :controller => 'users', :action => 'show'

Mesmo erro como 1.

match '/:username', to: 'users/:id', via: 'show'

O servidor não inicia.

match "/:username" => redirect("/users/:id")

Erro:

 ActiveRecord::RecordNotFound in UsersController#show

 Couldn't find User with id=:id

Alguma idéia de por que meu roteamento não está funcionando da mesma forma que todos os outros que fazem essa pergunta são?

Atualizar

Só para tirar essa questão dos comentários e colocá-la na questão de forma mais clara. Depois de fazer a alteração por @Ryan Bigg abaixo, eu tive um problema de roteamento no meu redirecionamento para o perfil quando um novo é criado. Aqui está o meu código de criação:

  def create
    @user = User.new(params[:user])
    if @user.save
        session[:user_id] = @user.id
        flash[:success] = "Thank you for signing up."
        redirect_to ('/'[email protected])
        #redirect_to @user, notice: "Thank you for signing up!"
    else
        render "new"
    end
  end

E aqui está meu user.rb

def to_param
    self.username
    #username
end

No entanto, o redirecionamento comentado, que acho que deveria funcionar com a atualização do to_param, não funciona, enquanto o feio e hackiano acima dele funciona. Por que o to_param sobrescreve,que funcionou para outras pessoasnão está funcionando no meu aplicativo? Meus métodos #update e #edit também não estão funcionando, já que seus redirecionamentos vão para "users / 1 / edit" em vez de "username / edit" se sobrescrever o to_param não cuida disso.

questionAnswers(2)

yourAnswerToTheQuestion