Я не согласен с тем, что jcm говорит по этому поводу. Это совсем не страшная идея и используется в производстве двумя крупнейшими социальными сетями Facebook и MySpace.
Маршрут для соответствия http://example.com/username
будет выглядеть следующим образом:
map.connect ':username', :controller => 'users', :action => 'show'
Если вы хотите перейти по маршруту субдомена и сопоставить профили с URL-адресом, подобным http://username.example.com/
, я рекомендую использовать плагин SubdomainFu, и полученный маршрут будет выглядеть так:
map.root :controller => 'users', :action => 'show' , :conditions => {:subdomain => /.+/}
Эти широкие, перехватывающие все маршруты должны быть определены последними в маршрутизации route.rb, чтобы они имели самый низкий приоритет, и более конкретные маршруты будут совпадать первыми.
Я также рекомендую использовать проверку в вашей модели User, чтобы исключить возможность выбора пользователем имени пользователя, которое будет конфликтовать с текущими и будущими маршрутами:
class User < ActiveRecord::Base
validates_exclusion_of :username, :in => %w( messages posts blog forum admin profile )
…
end