Обычно я просто бросаю их в пространство имен. Это - то, что Microsoft делала записи платформа.NET, таким образом, это - то, что я делаю также для непротиворечивости, которую Вы понимаете :)
Я не знаю, как сделать это с помощью map.resources
. Он принимает параметр : conditions
, но я не знаю, как удалить часть URL-адреса / companies /
. Однако map.resources
- это, прежде всего, удобный способ сгенерировать набор именованных маршрутов, который вы можете сделать вручную. Что-то вроде этого.
map.company '', :controller => 'companies', :action => 'show', :conditions => { :subdomain => /.+/, :method => :get }
map.new_company 'new', :controller => 'companies', :action => 'new', :conditions => { :subdomain => /.+/, :method => :get }
map.edit_company 'edit', :controller => 'companies', :action => 'edit', :conditions => { :subdomain => /.+/, :method => :get }
map.connect '', :controller => 'companies', :action => 'create', :conditions => { :subdomain => /.+/, :method => :post }
map.connect '', :controller => 'companies', :action => 'update', :conditions => { :subdomain => /.+/, :method => :put }
map.connect '', :controller => 'companies', :action => 'destroy', :conditions => { :subdomain => /.+/, :method => :delete }
Не тестировалось, но должно вас приблизить.
Можно передавать условия в маршрут ресурса, а также в именованный маршрут. В приложении, в котором я участвую, все ограничено учетной записью. О: before_filter загружает учетную запись, используя поддомен. Таким образом, для ресурсов, привязанных к учетной записи, мы хотим привязать маршруты к URL-адресам с поддоменами. СУХОЙ способ сделать это - использовать карту с опциями:
map.with_options :conditions => {:subdomain => /.+/} do |site|
site.resources :user_sessions, :only => [:new, :create, :destroy]
site.resources :users
site.login 'login', :controller => "user_sessions", :action => "new"
site.logout 'logout', :controller => "user_sessions", :action => "destroy"
…
end
map.connect 'accounts/new/:plan', :controller => "accounts", :action => "new"
map.resources :accounts, :only => [:new, :create]
Как видите, именованный маршрут также принимает хэш условий с поддоменом. Вы также можете использовать подход, проиллюстрированный выше, Райан, или вы можете указать условия для каждого ресурса:
map.resources :users, :conditions => {:subdomain => /.+/}