Для Ruby on Rails 4.1.4 (и, возможно, более ранних версий) вам нужно сделать то, что оба j .. и Ujjwal предлагают:
1) В config/routes.rb
добавить:
resources :user, param: :username
2) В app/models/user.rb
добавить:
def to_param
username
end
Если вы выполняете только # 1, все ваши маршруты будут правильными, как видно из rake routes
:
$ rake routes
Prefix Verb URI Pattern Controller#Action
user_index GET /user(.:format) user#index
POST /user(.:format) user#create
new_user GET /user/new(.:format) user#new
edit_user GET /user/:username/edit(.:format) user#edit
user GET /user/:username(.:format) user#show
PATCH /user/:username(.:format) user#update
PUT /user/:username(.:format) user#update
DELETE /user/:username(.:format) user#destroy
Однако вспомогательные методы, которые создают URL на основе экземпляра User
, будут по-прежнему включать id
в URL, например, /user/1
. Чтобы получить username
в построенных URL, вам нужно переопределить to_param
, как в # 2.