2010-11-30 12 views
16

レールでサブドメインの値を取得する方法はありますか?これを行うための組み込みの方法はありますか?URLからサブドメインの値を取得するにはどうすればよいですか?

test123.example.com 

urlのtest123部分が必要です。

+0

あなた心の中で下位互換性をすべきですか? –

+0

これは、現在のURLだけでなく文字列のサブドメインを見つけるためのソリューションを提供することによって、より良い答えになると思います。これを考慮すると、検索のためのGoogleの#1の結果 "レールはサブドメインを取得する" – Joshua

答えて

21

Rails 3.0にはこの機能が組み込まれており、request.subdomainからサブドメインにアクセスできます。

あなたがサブドメインに基づいてもルートすることができます:

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 

あなたが2.3を使用している場合は、subdomain-fuのようなプラグインを使用する必要があります。

+0

これは、ラックミドルウェアを使用するときに行う方法はありますか? request.subdomainはrequest.hostのみ利用できません – cman77

+0

@ cman77あなたは[this](http://tannerburson.com/2009/01/extracting-subdomains-in-sinatra.html/)や[rack-サブドメイン](https://github.com/mattt/rack-subdomain)を参照してください。 –

+0

これは開発中ですか? – Noz

4

account_locationも良いプラグインです。それを使用した後、異なるサブドメインに基づいてアカウントを見つけることができます。そして、あなたのコードに

request.subdomains(0).first
と書くだけで、URLからサブドメインを見つけることができます。

0

SubdomainFu pluginを使用できます。このプラグインは、あなたのアプリのcurrent_subdomainを返すcurrent_subdomainメソッドを提供します。

またthis Railscast

UPDATE

を見ているあなたも、これはあなたのサブドメインの配列を与えるrequest.subdomainsを使用することができます。

config/environments/development.rbconfig.action_dispatch.tld_length = 0を入れ、すべて動作するはずです:あなたのコントローラでシンプル

1

だけで、次のWEBrickにを使用して、ローカルホスト上のサブドメインを取得するために探している人のために

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

を使用すると、文字列での作業、そして、それは本当のURI可能と想定されている場合は、あなたがこれを行うことができますので、ここで投稿する

リンクサブドメインを抽出します。

require 'uri' 

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

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

+0

Railsはすでにこれを行う組み込み関数を持っているので-1を与えます。これにより、ホイールが再現され、エラーが発生しやすくなります。 – corvuszero

+0

+1私は実際に文字列を解析する必要があったため+1します。私は 'request.referrer'を解析しようとしていました。 @corvuszeroを聞かないでください。問題は具体的ではありませんでした。ありがとう! –

4

これは少し遅れてのパーティにサブドメイン

+2

'request.subdomain'は配列を返しません。 'request.subdomains'は行います。複数形のサブドメインに注意してください。 –

+0

良いアイ、答えを更新しました。 –

0

の配列を返しますが、ここで私は古いバージョンで使用されるものだ

request.subdomains 

あなたのコントローラ内の次のメソッドを使用しますレールの。

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

これは、正規表現を使用して、新しいバージョン

関連する問題