2012-05-09 12 views
11

Decir que tengo las siguientes rutas que están restringidas a los subdominios específicos:Incluir subdominio de ruta restringida en Rails asistente de 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 

Mi problema es que root_url y backend_root_url tanto devuelve una URL en el subdominio actual: "http : // actual-subdominio .lvh.me/"en su lugar, el subdominio específico para el recurso. me gustaría volver root_url "http: // www .lvh.me /" y backend_root_url para volver "http: // administrador .lvh.me /" (el comportamiento debe ser el mismo para todos los recursos bajo el subdominio).

He tratado de lograr esto en los carriles 3.2 mediante el establecimiento de las opciones de URL en varios lugares, uno de ellos en url_options controlador de aplicación:

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

Tal vez necesito para anular los ayudantes URL de forma manual? ¿Cómo abordaría eso (accediendo a las rutas, etc.)?

Editar: Puedo obtener el resultado correcto usando root_url (: subdomain => "admin") que devuelve "http: // admin .lvh.me /" independientemente del subdominio actual. Sin embargo, preferiría no tener que especificar esto en todo el código.

Respuesta

9

El uso de "valores predeterminados" como se muestra a continuación hará que los rails url helpers muestren el subdominio correcto.

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

Esto funciona genial! Un problema que encontré es que esto solo funciona si su dominio base no incluye un subdominio. Si lo hace, debe incluirlo como: host. O puede establecer: host definiendo ApplicationController # default_url_options para devolver un hash que contenga: host. – mltsy

+0

Lo retiro, incluso eso no resuelve el problema si ya tiene un subdominio para su nombre de host principal. No he encontrado una manera de hacerlo sin escribir su propio método de ayuda. – mltsy

Cuestiones relacionadas