我正在创建一个rails 5应用程序,我希望能够通过不同的URL访问它。例如,以下两个URL将由同一个应用程序提供支持;
让我们在每个主页上说,我想显示一个到这些国家主要城市的链接列表。每个主要城市也都有自己的页面;
他们将共享同一个数据库。
这似乎是一个常见的问题,但我一直无法找到直截了当的答案。
非常感谢任何帮助。
答案 0 :(得分:1)
我会在您的应用中的某个位置“注册”网址:
protected void Application_Start(object sender, EventArgs e)
{
if (!ServiceController.isCachingEnabled)
{
SqlDependency.Stop(strConnectionString);
SqlDependency.Start(strConnectionString);
}
}
然后你可以在控制器中添加一个看起来像这样的方法来获取国家:
{
"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
。
要使路由current_country.cities.find_by(slug: params[:city_slug])
正常工作,您需要在路由文件中使用以下内容:
获取'/:city_slug',以:'cities#show'
答案 1 :(得分:-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 %>
请记住在控制器中公开这两种方法,或者无法从视图中访问它们。