0

Я хочу изменить свой файл routes.rb таким образом, так что он изменяет свои текущие адресаизменение маршрутов URL из случайного: идентификатор: имя пользователя в рельсах

localhost:3000/amitian/1 

на локальный: 3000/имя пользователя

я представлю свой файл routes.rb для справки

Rails.application.routes.draw do 

devise_for :amitians 

root 'home#index' 
resources :amitians do 
member do 
get :following, :followers 
end 
end 
resources :confessions do 
member do 
    get 'like' , to: 'confessions#upvote' 
    get 'dislike' , to: 'confessions#downvote' 
    end 
    resources :confessioncomments 
    end 
    resources :relationships, only: [:create, :destroy] 

end 
+0

Этот вопрос очень похож на: http://stackoverflow.com/questions/24226378/rails-routes-with-name-instead-of-id-url-parameters, который предлагает использовать friendly_id –

+0

Я не чувствую friendly_id gem - это то, что я хочу –

ответ

2

Как уже упоминалось 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, который использует числовые идентификаторы.

Если вы хотите использовать имя пользователя вместо идентификаторов, вам придется перестать полагаться на эти методы и изменить свои контроллеры и представления в дополнение к файлу маршрутов.

0

в рельсах 4 вы можете сделать следующее в маршруте

resources :amitians, param: :username 
+0

Я пробовал это, но это ничего не меняет URL-адрес по-прежнему –