2012-05-09 28 views
11

Say mam następujące trasy, które są ograniczone do poszczególnych subdomen:Dołącz subdomenę dla ograniczonym trasy w Rails url pomocnika

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 

Moim problemem jest to, że root_url i backend_root_url zarówno zwraca adres URL na bieżącej subdomeny: „http : // obecna poddomena .lvh.me/"zamiast subdomeny specyficznej dla zasobu. Chciałbym root_url powrotu "http: // www .lvh.me /" i backend_root_url powrotu "http: // Administrator .lvh.me /" (zachowanie powinny być takie same dla wszystkich zasobów w ramach poddomena).

starałem się tego dokonać w szynach 3,2 ustawiając opcje URL w różnych miejscach, z których jedna jest url_options w kontrolerze aplikacji:

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

Może muszę ręcznie nadpisać pomocników URL? Jak mam się do tego zbliżyć (dostęp do tras itp.)?

Edytuj: Jestem w stanie uzyskać poprawny wynik przy użyciu root_url (: subdomain => "admin"), który zwraca "http: // admin .lvh.me /" niezależnie od aktualnej subdomeny. Jednak wolałbym nie określać tego całego kodu.

Odpowiedz

9

Użycie "defaults" jak pokazano poniżej spowoduje, że pomocnicy urlów railsowych wyprowadzą poprawną poddomenie.

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

Działa to świetnie! Wystąpił tylko jeden problem: działa to tylko wtedy, gdy domena podstawowa nie zawiera jeszcze poddomeny. Jeśli tak, musisz uwzględnić to jako: host. Lub możesz ustawić: host, definiując ApplicationController # default_url_options, aby zwrócić hash zawierający: host. – mltsy

+0

Odzyskuję, nawet to nie rozwiąże problemu, jeśli masz już subdomenę dla głównej nazwy hosta. Nie wymyśliłem sposobu, aby to zrobić bez pisania własnej metody pomocnika. – mltsy

Powiązane problemy