2017-04-05 88 views
1

我正在創建一個我希望能夠被不同URL訪問的rails 5應用程序。例如,以下兩個URL將由同一個應用提供支持;多個域,一個rails應用程序

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

讓我們每個我想顯示的鏈接,這些國家主要城市名單的網頁上說。每個主要城市也將擁有自己的頁面;

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

他們將共享相同的數據庫。

這似乎是一個常見問題,但我一直無法找到一個簡單的答案。

任何幫助,非常感謝。

+1

你問如何顯示基於當前域的不同內容? – Beejamin

回答

-1

可能有更好的方法,但如果你調用request.url,rails會返回當前地址。例如,我們可以使我們的應用控制器如下:

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)gem。 – Wikiti

+1

好點!我的默認設置的一部分,我忘了我甚至包括它 – Mark

1

我「登記」在散中的網址應用的地方:

{ 
    "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 

如果您使用數據庫來保存城市的國家,您可以在該方法中查找。而且,對於主頁,您可以顯示current_country.cities.popular.limit(5)或類似的東西。

我還假設你不希望example.co.nz/sydney工作。在這種情況下,請確保將其範圍限定在國家/地區:當/city_name網址被擊中時,您執行current_country.cities.find_by(slug: params[:city_slug])

爲了使路線/city_slug工作,你需要這樣的事情在你的路由文件:

得到「/:city_slug」,爲:「城市#秀」

相關問題