Rails 3 - один и тот же контроллер для двух поддоменов разных областей - PullRequest
2 голосов
/ 01 января 2012

Я хочу использовать один и тот же контроллер для 2 поддоменов, но с разной областью действия.

Например (в моем rout.rb):

constraints :subdomain => "admin" do
  resources :photos
end

constraints :subdomain => "www" do
  scope "/mystuff"
    resources :photos
  end
end

Теперь, когда я запускаю "Рейк-маршруты", у меня есть "/ mystuff / photos" и "/photos".

У меня есть 2 вопроса:

  1. Это нормально делать?
  2. Как использовать именованные маршруты в этом случае? У меня есть что-то вроде admin_photos_url и www_photos_url?

1 Ответ

4 голосов
/ 02 января 2012

Я думаю, это просто прекрасно ... Маршрутизация в Rails достаточно гибкая (для учета подобных ситуаций).

Тем не менее, я бы изменил ваши маршруты, чтобы они были более похожими, чтобы правильно назвать помощников на вашем пути:

scope :admin, :as => :admin, :constraints => { :subdomain => "admin" } do
  resources :photos
end

scope '/mystuff', :as => :mystuff, :constraints => { :subdomain => "www" } do
  resources :photos
end

Что даст вам:

      admin_photos    GET    /photos(.:format)                      {:subdomain=>"admin", :action=>"index", :controller=>"photos"}
                      POST   /photos(.:format)                      {:subdomain=>"admin", :action=>"create", :controller=>"photos"}
   new_admin_photo    GET    /photos/new(.:format)                  {:subdomain=>"admin", :action=>"new", :controller=>"photos"}
  edit_admin_photo    GET    /photos/:id/edit(.:format)             {:subdomain=>"admin", :action=>"edit", :controller=>"photos"}
       admin_photo    GET    /photos/:id(.:format)                  {:subdomain=>"admin", :action=>"show", :controller=>"photos"}
                      PUT    /photos/:id(.:format)                  {:subdomain=>"admin", :action=>"update", :controller=>"photos"}
                      DELETE /photos/:id(.:format)                  {:subdomain=>"admin", :action=>"destroy", :controller=>"photos"}
    mystuff_photos    GET    /mystuff/photos(.:format)              {:subdomain=>"www", :action=>"index", :controller=>"photos"}
                      POST   /mystuff/photos(.:format)              {:subdomain=>"www", :action=>"create", :controller=>"photos"}
 new_mystuff_photo    GET    /mystuff/photos/new(.:format)          {:subdomain=>"www", :action=>"new", :controller=>"photos"}
edit_mystuff_photo    GET    /mystuff/photos/:id/edit(.:format)     {:subdomain=>"www", :action=>"edit", :controller=>"photos"}
     mystuff_photo    GET    /mystuff/photos/:id(.:format)          {:subdomain=>"www", :action=>"show", :controller=>"photos"}
                      PUT    /mystuff/photos/:id(.:format)          {:subdomain=>"www", :action=>"update", :controller=>"photos"}
                      DELETE /mystuff/photos/:id(.:format)          {:subdomain=>"www", :action=>"destroy", :controller=>"photos"}
...