2012-08-18 133 views
1

我正在建立最后一分钟的假期网站。

现在我正忙着构建seo友好的网址。每个最后的分钟有一个国家和一个城市。我想让网址的样子的方法是TE如下:

对于页面,每个国家都最后几分钟:
“domain.com/last-minutes-spain”

对于所有页面每个城市的最后几分钟时间:
“domain.com/last-minutes-spain/barcelona”

页面的每个国家/ 。

我的路线(我使用的是friendly_id宝石):
在轨道搜索引擎优化友好的网址

match '/last-minutes-:id' => 'countries#show', :as => 'show_country' 
match "/last-minutes-:country_id/:id" => 'city#show', :as => 'show_city' 

countries_controller.rb:

def show 
    @country = Country.find(params[:id]) 
end 

国家/ show.html.erb:

<% @country.cities.each do |c| -%> 
    <%= link_to(c.title, show_city_path(c.slug)) %><br /> 
<% end -%> 

c.slug用于friendly_id宝石

展示城市路径(每个城市最后一分钟为单位)显示如下:
“domain.com/last-minutes-barcelona/spain“

所以城市和乡村都去错了地方。有谁知道如何正确地使用它?

+1

您需要提供您遇到问题的'link_to'或'url_for'代码。 – deefour 2012-08-18 18:07:18

+0

<%= link_to(c.title,show_city_path(c.slug))%> – 2012-08-19 08:39:07

+0

什么是'c'?什么'c.slug'?如果您提供的信息非常有限,我们无法真正帮助您。 – deefour 2012-08-19 11:38:22

回答

0

你真正想要做的是看看你的模型中重写to_param。

每当有任何尝试构建涉及模型的路径的调用时,都会在模型的实例上调用to_param方法以确定如何在URL中引用它。换句话说,你的路线中的部分对应于:id。如果你只是重写这个方法,你可以返回任何你想要的。最简单的方法是保留整数ID作为第一个值。类似这样的:

def to_param 
    return "#{self.id}-#{self.text_for_seo}" 
end 

就是这样。事实上,我昨天刚刚录制了一篇演练。第一件事很快就会覆盖,正是你想要的。然后它解释了如何花费这些支持加密数据库ID:http://www.youtube.com/watch?v=UW_s9ejrCsI

相关问题