2010-11-30 19 views
16

Alt etki alanı değerini raylarda nasıl alabilirim, bunun için yerleşik bir yol var mı?Alt etki alanı değeri bir URL'den nasıl alınır?

örn.

test123.example.com 

URL'nin test123 bölümünü istiyorum.

+0

yeni sürümlerinde geriye dönük uyumlu olmalıdır? –

+0

Sanırım bu, bir dizenin yanı sıra mevcut URL'nin alt etki alanını bulmak için bir çözüm sağlayarak daha iyi yanıtlanabilir. Bunu göz önünde bulundurursak google'da arama sonucu google'da # 1 sonuç elde edilir "raylar bir URL'nin alt etki alanını alır" – Joshua

cevap

21

Rails 3.0, bu özelliğe sahiptir, alt alana request.subdomain'dan erişebilirsiniz.

Sen alt etki dayalı da rota yapabilirsiniz:

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 

Eğer 2.3 kullanıyorsanız, size subdomain-fu gibi bir eklenti kullanmak gerekir. Aynı zamanda, iyi bir eklenti olan

+0

Rack Middleware kullanırken bunu yapmanın bir yolu var mı? request.subdomain sadece mevcut değil request.host – cman77

+0

@ cman77 [Bu] gibi bir şey deneyebilirsiniz (http://tannerburson.com/2009/01/extracting-subdomains-in-sinatra.html/) veya [rack- Daha karmaşık durumlar için alt alan adı] (https://github.com/mattt/rack-subdomain). –

+0

Bu geliştirme aşamasında mı çalışıyor? – Noz

4

account_location da iyi bir eklentidir. Bunu kullandıktan sonra, hesabı farklı alt alanlara göre bulabilirsiniz. Ve kodunuzda sadece

request.subdomains(0).first
yazarak URL'den subdomain bulabilirsiniz.

0

SubdomainFu plugin'u kullanabilirsiniz. Bu eklenti, uygulamanızın current_subdomain öğesini döndüren bir current_subdomain yöntemi sunar.

Ayrıca bu size alt alanlardan bir dizi verecektir Ayrıca request.subdomains kullanabilirsiniz this Railscast

GÜNCELLEME

bir göz olabilir.

config/environments/development.rb içine config.action_dispatch.tld_length = 0 koyun ve her şeyi çalışması gerekir: Kumandanızda içinde Basit

1

sadece aşağıdaki WEBrick kullanarak localhost üzerinde alt alanları almak isteyen herkes için

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

bir dize ile çalışan ve gerçek bir URI olabilir varsayarak, sen bunu yapabilirsiniz alt etki alanını ayıkla.

require 'uri' 

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

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

+0

Rails, bunu zaten yapan bir fonksiyona sahip olduğu için -1 kazandığından, bu, tekerleği yeniden icat eder ve hatalara daha yatkın olabilir. – corvuszero

+0

+1 çünkü bir dizeyi ayrıştırmam gerekiyordu. 'Request.referrer''i ayrıştırmaya çalışıyordum. @corvuszero'yu dinleme. Soru belli değildi. Teşekkürler! –

4

kullanın controller içerisinde şu yöntem

request.subdomains 

Bu partiye geç ama burada biraz ben eski sürümlerinde kullanılan budur alt alanlar

+2

'request.subdomain' bir dizi döndürmez. 'request.subdomains' yapar. Birden çok alt alan adına dikkat edin. –

+0

İyi göz, cevabı güncelledim. –

0

bir dizi döndürür rayların.

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

normal bir ifade kullanarak sakıncası

İlgili konular