Подтвердить что ты не робот

Включить субдомен для ограниченного маршрута в Rails url helper

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

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:// admin.lvh.me/" (поведение должно быть одинаковым для всех ресурсов под субдоменом).

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

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

Возможно, мне нужно переопределить помощники URL вручную? Как я подхожу к этому (доступ к маршрутам и т.д.)?

Изменить: я могу получить правильный результат с помощью root_url (: subdomain = > "admin" ), который возвращает "http:// admin.lvh.me/" независимо от текущего поддомен. Тем не менее, я бы предпочел не указывать это по всему коду.

4b9b3361

Ответ 1

Использование "значений по умолчанию", как показано ниже, заставит рельсовых помощников 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