2017-04-05 22 views
1

私は異なるURLからアクセスできるようにするために、レール5アプリケーションを作成しています。たとえば、次の2つのURLは同じアプリから提供されます。複数のドメイン、1つのレールアプリケーション

  • example.com.au
  • example.co.nz

のは、私はその国の主要都市へのリンクのリストを表示したい各のホームページ上で言ってみましょう。各主要都市には独自のページもあります。

  • example.com.au/sydney
  • example.co.nz/auckland

彼らは同じデータベースを共有することになり。

これは一般的な問題だと思われますが、私は簡単な答えを見つけることができませんでした。

ご迷惑をおかけして申し訳ありません。

+1

あなたが表示する方法を求めています現在のドメインに基づいて異なるコンテンツですか? – Beejamin

答えて

-1

もっと良い方法がありますが、request.urlを呼び出すと、現在のアドレスが返されます。例えば、我々は我々のアプリケーションのコントローラで次のように作ることができる:あなたのビューで次に

expose(:sydney?) 
expose(:auckland?) 

def sydney? 
    request.url.include?('sydney') 
end 

def auckland? 
    request.url.include?('auckland') 
end 

<% if sydney? %> 
    <%= Do some stuff %> 
<% elsif auckland? %> 
    <%= Do some other stuff %> 
<% else %> 
    <%= Do stuff for no city %> 
<% end %> 

は、コントローラの両方のメソッドを公開したり、あなたのビューからそれらにアクセスすることはできません覚えておいてください。

+0

'expose'メソッドは[' decent_exposure'](http://railscasts.com/episodes/259-decent-exposure)の宝石から来ていることに言及してください。 – Wikiti

+1

良い点!私のデフォルトの設定の一部私はそれをもはや含めることを忘れる – Mark

1

私はどこかにあなたのアプリケーション内のハッシュ内のURLを「登録」したい:

{ 
    "example.com.au" => "AU", 
    "example.co.nz" => "NZ", 
} 

次にあなたが国を取得するには、次のようになりますあなたのコントローラにメソッドを追加することができます。

def current_country 
    domain_name = extract_domain_name(request.original_url) 
    Settings.domain_country_map[domain_name] 
end 

have_many都市を保存するデータベースを使用している場合は、その方法で検索を行います。ホームページにはcurrent_country.cities.popular.limit(5)などが表示されます。

また、example.co.nz/sydneyが機能しないと思われます。その場合は、国の範囲を指定してください:/city_nameのURLにヒットしたら、current_country.cities.find_by(slug: params[:city_slug])を実行します。

ルート/city_slug動作させるために、あなたはルートファイルでこのようなものが必要だろう:

のget「/:city_slug」、へ:「都市の#ショー」

関連する問題