Как уже упоминалось Gregg, вы можете изменить имя параметра с помощью:
resources :amitians, param: :username
Но вы, по сути просто переименовать переменную. Если вы ожидаете, идентификатор или имя пользователя определяется в действии контроллера amitians # шоу:
@amitian = Amitian.find(param[:id]) # Treat :id as id
@amitian = Amitian.find_by_username(param[:id]) # Treat :id as username
Теперь, если вы хотите конкретно маршрут /:username
, а не /amitians/:username
, вы должны переопределить этот маршрут ресурса:
resources :amitians, except: [:show] do
member do
get :following, :followers
end
end
get '/:username', to: 'amitians#show'
Однако я бы рекомендовал против этого. Наличие параметра непосредственно из корня вызовет много путаницы для вас, когда пользователи вводят неправильный URL-адрес и получают страницу пользователя вместо ошибки 404. Или еще хуже, что, если пользователь выбирает имя пользователя 'login' или 'register'? Либо страница вашего регистра будет недоступна, либо будет отображаться страница пользователя.
Я хотел бы также отметить, что рельсы удобные методы, такие как resources
, Amitian.find
, url_for @amitian
, link_to @amitian
и т.д. все используют стандарт REST, который использует числовые идентификаторы.
Если вы хотите использовать имя пользователя вместо идентификаторов, вам придется перестать полагаться на эти методы и изменить свои контроллеры и представления в дополнение к файлу маршрутов.
Этот вопрос очень похож на: http://stackoverflow.com/questions/24226378/rails-routes-with-name-instead-of-id-url-parameters, который предлагает использовать friendly_id –
Я не чувствую friendly_id gem - это то, что я хочу –