2012-05-09 13 views
11

で拘束されたルートのサブドメインを含め、私は特定のサブドメインに拘束されている次のルートを持っていると言う:「のhttp:は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_urlbackend_root_urlの両方が現在のサブドメイン上のURLを返すということです:// current-subdomain .lvh.me/"代わりにリソースに固有のサブドメイン。 I root_urlを返したい "にhttp:// WWW .lvh.me /" とbackend_root_url返すように "にhttp:// 管理 .lvh.me /"(振る舞いは下のすべてのリソースに対して同じである必要がありますサブドメイン)。たぶん私は手動でURLヘルパーをオーバーライドする必要が

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

私は様々な場所でURLオプション、アプリケーションのコントローラ内の一つであるurl_optionsを設定することにより、レール3.2でこれを実現しようとしましたか?どのように私はそれに近づくでしょう(ルートにアクセスするなど)?

編集:現在のサブドメインに関係なく、 "http:// admin .lvh.me /"を返すroot_url(:サブドメイン=> "admin")を使用して正しい結果を得ることができます。しかし、コード全体にこれを指定する必要はありません。

答えて

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

これは素晴らしい機能です。私が遭遇した1つの問題は、ベースドメインにサブドメインがまだ含まれていない場合にのみこれが機能することです。そうであれば、それをホストとして含める必要があります。または、次のように設定することもできます:host:ApplicationController#default_url_optionsを定義して、host:hostを含むハッシュを返します。 – mltsy

+0

メインホスト名のサブドメインがすでにある場合は、問題が解決しない場合もあります。私はあなた自身のヘルパーメソッドを書かずにそれを行う方法を考え出していません。 – mltsy

関連する問題