2010-11-30 22 views
16

¿cómo puedo obtener el valor del subdominio en los rieles, hay una forma integrada de hacerlo?¿Cómo obtener el valor de subdominio de una url?

p. Ej.

test123.example.com 

Quiero la parte test123 de la url.

+0

le importa usar una expresión regular? –

+0

Creo que esto sería mejor respondido al proporcionar una solución para encontrar el subdominio de una cadena, así como la url actual. Teniendo en cuenta que este es el resultado n. ° 1 en google para la búsqueda "los rieles obtienen el subdominio de una url" – Joshua

Respuesta

21

Rails 3.0 tiene esta capacidad incorporada, puede acceder al subdominio desde request.subdomain.

También puede enrutar basado en el subdominio:

class SupportSubdomain 
    def self.matches?(request) 
    request.subdomain == "support" 
    end 
end 

Basecamp::Application.routes do 
    constraints(SupportSubdomain) do 
    match "/foo/bar", :to => "foo#bar" 
    end 
end 

Si está utilizando 2.3, tendrá que usar un plugin como subdomain-fu.

+0

¿Hay alguna manera de hacerlo al usar Rack Middleware? request.subdomain no está disponible solo request.host – cman77

+0

@ cman77 Puede intentar algo como [esto] (http://tannerburson.com/2009/01/extracting-subdomains-in-sinatra.html/), o [rack- subdominio] (https://github.com/mattt/rack-subdomain) para situaciones más complejas. –

+0

¿Esto funciona en desarrollo? – Noz

4

account_location es también un buen complemento. Después de usarlo, puede encontrar la cuenta basada en diferentes subdominios. Y puede averiguar el subdominio desde url simplemente escribiendo

request.subdomains(0).first
en su código.

0

Puede usar el SubdomainFu plugin. Este complemento le proporciona un método current_subdomain que devuelve el dominio_actual de su aplicación.

También puede echar un vistazo a this Railscast

ACTUALIZACIÓN

También puede utilizar request.subdomains esto le dará una serie de subdominios.

1

simple en su controlador simplemente haga lo siguiente

unless request.subdomains.any? 
    #No domains available redirect 
    redirect_to subdomain: 'www' 
end 
0

En caso de que usted está trabajando con una cadena, y asumiendo que puede ser una verdadera URI, puede hacerlo a extraer el subdominio

require 'uri' 

uri = URI.parse('http://test123.example.com') 
uri.host.split('.').first 
=> "test123" 

https://stackoverflow.com/a/13243810/3407381

+0

Dio un -1 ya que Rails tiene una función incorporada que ya lo hace, por lo que reinventaría la rueda y podría ser más propenso a errores. – corvuszero

+0

+1 porque realmente necesitaba analizar una cadena. Estaba intentando analizar 'request.referrer'. No escuches a @corvuszero. La pregunta no fue específica. ¡Gracias! –

4

Usar el siguiente método dentro de su controlador

request.subdomains 

Esto devuelve un conjunto de subdominios

+2

'request.subdomain' no devuelve una matriz. 'request.subdomains' hace. Tenga en cuenta la forma plural de subdominio. –

+0

Buen ojo, actualicé la respuesta. –

0

Un poco tarde a la fiesta, pero esto es lo que he usado en versiones anteriores de rieles.

subdomain = rquest.subdomains.join('.')

Debe ser compatible con versiones anteriores en las últimas versiones

Cuestiones relacionadas