2012-08-18 152 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

相關問題