2012-05-09 2 views
11

Скажем, у меня есть следующие маршруты, которые ограничены конкретными подобластей:Включить субдомен для ограниченного маршрута в Rails URL-адрес помощника

App::Application.routes.draw do 
    constraints :subdomain => "admin" do 
    scope :module => "backend", :as => "backend" do 
     resources :signups 
     root :to => "signups#index" 
    end 
    end 
    constraints :subdomain => "www" do 
    resources :main 
    root :to => "main#landing" 
    end 
end 

Моя проблема заключается в том, что root_url и backend_root_url и возвращает URL на текущей подобласти: «HTTP : // current-subdomain .lvh.me/"вместо этого субдомен, специфичный для ресурса. Я хотел бы root_url вернуться «Http: // WWW .lvh.me /» и backend_root_url вернуться «HTTP: // админ .lvh.me /» (поведение должно быть одинаковым для всех ресурсов в рамках субдомен).

Я попытался сделать это в рельсах 3.2, установив параметры URL-адреса в разных местах, один из которых url_options в контроллере приложения:

class ApplicationController < ActionController::Base 
    def url_options 
    {host: "lvh.me", only_path: false}.merge(super) 
    end 
end 

Может быть, мне нужно переопределить URL-адрес хелперы вручную? Как я могу подойти к этому (доступ к маршрутам и т. Д.)?

Edit: я могу получить правильный результат, используя root_url (: субдомна => «администратор»), который возвращает «HTTP: // админ .lvh.me /» независимо от текущего субдомена. Тем не менее, я бы предпочел не указывать это по всему коду.

ответ

9

Использование «по умолчанию», как показано ниже, сделает рельсы-помощники URL-адресов для вывода правильного субдомена.

App::Application.routes.draw do 
    constraints :subdomain => "admin" do 
    scope :module => "backend", :as => "backend" do 
     defaults :subdomain => "admin" do 
     resources :signups 
     root :to => "signups#index", :subdomain => "admin" 
     end 
    end 
    end 

    constraints :subdomain => "www" do 
    defaults :subdomain => "www" do 
     resources :main 
     root :to => "main#landing" 
    end 
    end 
end 
+0

Это отлично работает! Одна из проблем, с которыми я столкнулась, заключается в том, что это работает только в том случае, если ваш базовый домен еще не включает субдомен. Если это так, вы должны включить это как: host. Или вы можете установить: host, указав ApplicationController # default_url_options, чтобы вернуть хэш, содержащий: host. – mltsy

+0

Я возвращаю его, даже если это не решит проблему, если у вас уже есть поддомен для вашего основного имени хоста. Я не понял способ сделать это, не написав собственный метод помощника. – mltsy

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