2009-08-19 2 views
8

Можно ли отобразить субдомен ресурсу? У меня есть модель компании. В настоящее время, используя subdomain_fu, мой файл маршрутизации содержит:Rails: маршрутизация субдомена на ресурс

map.company_root '', :controller => 'companies', :action => 'show', 
         :conditions => { :subdomain => /.+/ } 

Моя модель компании содержит столбец «поддомен».

Хотя это работает по назначению, это именованный маршрут и не успокаивается. По сути, мне нужно нанести на карту «name.domain.com» действие шоу для контроллера компании. Является ли маршрут по именованным маршрутам, или я могу использовать маршрут ресурсов?

ответ

4

Я не знаю, как это сделать с помощью 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 } 

Непрошеный, но он должен вас подвести.

+0

Благодаря Райан! То, что я сделал, - это размещение ресурсов компаний в пространстве имен. Это позволяет получать доступ к новым, редактировать, создавать, обновлять и уничтожать действия без субдомена: I.e. domain.com/namespace/companies/action Затем, за пределами пространства имен, я использую этот map.company с именем route (когда присутствует субдомен). Кажется, все красиво выглядит. – Homar

8

Условия передачи ресурса, а также именованный маршрут могут быть переданы. В приложении я участвую во всем, что связано с учетной записью. A: before_filter загружает учетную запись с использованием поддомена. Таким образом, для ресурсов, привязанных к учетной записи, мы хотим охватить маршруты URL-адресами с субдоменами. DRY способ сделать это состоит в использовании карты с опциями:

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 => /.+/} 
2

Вот полный пример реализации Rails 3 subdomains с аутентификацией (наряду с подробным учебника). Это намного проще сделать в Rails 3, чем в Rails 2 (плагин не требуется).

+0

Спасибо за подсказку. Глубокая ссылка на пример route.rb: https://github.com/fortuity/rails3-subdomain-devise/blob/master/config/routes.rb –

2

Используя ресурс, связанный с ответом Даниила, в Rails 3 путь к маршруту «/» на другой контроллер в зависимости от поддомена выглядит следующим образом:

match '/' => 'somecontroller#action', :constraints => { :subdomain => 'yoursubdomain' } 

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

  • Нет связанных вопросов^_^