У меня может быть частичный ответ для вас, поскольку кажется, что вы хотите сделать что-то очень похожее на то, что я делаю для мобильной версии моего сайта. После того, как я определил, что пользователь является мобильным, я добавляю мобильный каталог в путь, чтобы переопределить любые представления, которые я оптимизировал для мобильных устройств. Если представление не существует в мобильном каталоге, по умолчанию используется представление по умолчанию.
Вот что я сделал для просмотров:
в app / controllers / application_controller.rb
before_filter :prepend_view_path_if_subdomain
def prepend_view_path_if_subdomain
unless pSubdomains.blank?
subdomain = request.subdomain.first
#This will add the subdomain view directory to the view path before the default
#Rails view directory and any views here will be picked up and rendered.
prepend_view_path 'app/' + subdomain + '/views'
end
end
Делать то же самое для контроллеров, однако, немного сложнее из-за маршрутизации. Не существует метода prepend_controller_path, который эквивалентен prepend_view_path. Честно говоря, я не уверен, как подойти к этому, вы могли бы использовать подход с помощью case case или, возможно, динамически пересылать запрос к контроллеру поддоменов (если он существует). Я думаю, что возможно было бы добавить before_filter к вашим контроллерам, который оценивает каждый запрос так же, как я показываю выше с представлениями, а затем определяет, какой контроллер следует использовать.
Я также наткнулся на этот вопрос: Rails 3.1 загружает контроллер с другого пути, основанного на поддомене , не уверен, поможет ли он вам или нет.