Rails: маршрутизация субдомена к ресурсу

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

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

Модель моей компании содержит "поддомен» колонка.

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

Ответы на вопрос(4)

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

 William Denniss09 авг. 2011 г., 11:26
Спасибо за чаевые. Глубокая ссылка на примерways.rb:github.com/fortuity/rails3-subdomain-devise/blob/master/config/...

так и для именованного маршрута. В приложении, которое я участвую, все относится к учетной записи. A: 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 => /.+/}
Решение Вопроса

Я нене знаю, как сделать это сmap.resources, Он принимает:conditions вариант, но яя не уверен, как удалить/companies/ часть URL. Тем не мение,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 }

Не проверено, но это должно приблизить вас.

 Homar19 авг. 2009 г., 18:18
Спасибо Райан! Что я'мы сделали, поместили ресурс компании под пространство имен. Это позволяет получить доступ к новым, редактировать, создавать, обновлять и уничтожать действия без поддоменов: т.е. domain.com/namespace/companies/action Затем, вне пространства имен, яиспользуя эту map.company с именованным маршрутом (при наличии субдомена). Кажется, все идет хорошо.

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

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

Ваш ответ на вопрос