2014-01-21 3 views

ответ

1

Вы можете добавить произвольный маршрут, как это с помощью:

get "/:username" => "users#show", as: :username 

Это передавать имя пользователя в качестве параметра шоу действия.

Тогда в ваших просмотров:

<%= link_to user.name, username_path(username: user.username) %> 

Вы также будете нуждаться в действие контроллера, который знает, как обращаться с параметром username. Если вы хотите использовать существующий контроллер пользователей и сохранить свои /users/:id URL, тоже, вы могли бы сделать что-то вроде:

def show 
    @user = if params[:username].present? 
    User.find_by_username(params[:username]) 
    else 
    User.find(params[:id]) 
    end 
end 
+0

спасибо за ответ. Это именно то, что мне нужно, но есть одна проблема. Как сохранить другие маршруты? Например ** site.com/products **? Есть ли способ добавить исключение или, возможно, добавить уловку всего маршрута? –

+0

Как оказалось, я мог разместить маршрут в самом низу, поэтому он оценивается последним. –

+0

Да. Вероятно, также неплохо добавить некоторые ограничения на формат параметра имени пользователя (например, имена пользователей, вероятно, не могут включать /), используя [параметр 'ограничения] (http://guides.rubyonrails.org/routing.html# сегмент-ограничение). –

Смежные вопросы