多个域,一个轨道应用程序



我正在创建一个 rails 5 应用程序,我希望能够通过不同的 URL 访问它。例如,以下两个 URL 将由同一应用提供支持;

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

假设在每个国家的主页上,我想显示指向该国家/地区主要城市的链接列表。每个主要城市也将有自己的页面;

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

它们将共享同一个数据库。

这似乎是一个常见问题,但我无法找到一个简单的答案。

任何帮助都非常感谢。

我会在您的应用程序中某处的哈希中"注册"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正常工作,您需要在路由文件中提供如下内容:

获取"/:city_slug",收件人为:"城市#显示">

可能有更好的方法可以做到这一点,但是如果你调用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 %>

请记住在控制器中公开这两种方法,否则无法从视图中访问它们。

最新更新