11

假设我有以下受限于特定子域的路由:

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/ ”并返回“ http://admin.lvh.me/ ”(子下所有资源的行为应该相同)。backend_root_url

我试图在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/" 而不管当前的子域。但是,我宁愿不必在整个代码中指定这一点。

4

1 回答 1

10

使用如下所示的“默认值”将使 rails url helpers 输出正确的子域。

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
于 2012-05-09T17:06:53.127 回答