Я бы предпочел использовать маршрут по умолчанию: controller /: action /: id для защиты от случаев, когда в списке есть 2 Джона.
Чтобы иметь собственный маршрут, как вы упомянули
отредактируйте Routes.rb, чтобы включить новый
map.connect ':controller/:action/:user_name'
Теперь такой запрос, как профиль / просмотр / john, должен доходить до вас как
@params = {:controller => "profile", :action=> "view", :user_name => "john"}
Используйте значение params [: user_name], чтобы найти и отобразить соответствующую запись в действии view контроллера. Вы также можете установить некоторые требования в части: имя_пользователя URL, например, он должен соответствовать / SomeRegexpToValidateNames /
map.connect ':controller/:action/:user_name',
:requirements => {:user_name => /\w+/}