2009-01-29 53 views
2

我遇到了一個小問題...我設置了一個服務於德國網站的rails應用程序。爲了利用Rails的內部多元化功能,我將所有模型保留爲英文(例如模型「JobDescription」)。 現在,如果我打電話「http://mysite.com/job_descriptions/」,我得到我所有的job_descriptions ....迄今爲止,這麼好。因爲我不想在我的網址英文術語「job_descriptions」,我把下列我的routes.rb在rails中重命名路由(地圖,link_to,to_param)

map.german_term '/german_term', :controller => 'job_descriptions', :action => 'index' 
map.german_term '/german_term/:id', :controller => 'job_descriptions', :action => 'show' 

如果我稱之爲「http://mysite.com/german_term/」或「http://mysite.com/german_term/283」我知道我所有的job_descriptions,這是精細。

但是,爲了使URL更加適合搜索引擎優化,我想在URL中更換用戶友好的插件。因此,我把我的job_description.rb如下:

def to_param 
"#{id}-#{name.gsub(/[^a-z0-9]+/i, '-')}" 
end 

其中,每當我在任何link_to方法使用「job_description_path」,使我的網址出類似「http://mysite/job_descriptions/13-my-job-description-title」。

但是,這是我卡住的地方,我想得到「http://mysite/german_term/13-my-job-description-title」。我已經嘗試在link_to代碼中將「job_description_path」與「german_term_path」進行交換,但僅生成「http://mysite/german_term/13」。顯然,to_param未被調用。 一個解決辦法,我發現是建立與鏈接:

<%= link_to job_description.name, german_term_path(job_description.to_param) %> 

但是,這是相當繁瑣改變這一切在我的代碼link_to電話。我想要的是當它出現在URL中時,用「german_term」代替「job_description」。

有什麼想法?!?

問候,

塞巴斯蒂安

回答

7

我想你將需要使用寧靜的路線助手來得到你想要的。

在這種情況下,它不會花費太多的重新分解(假設您已將JobDescriptions映射爲資源)。留下你to_param的是,改變你的JobDescriptions路線,像下面這樣:

map.resources :job_descriptions, :as => 'german_term' 

希望這有助於!

+0

真棒邁克!這正是我所期待的!不知道爲什麼我沒有在「地圖」中找到它 - 文檔... – Sebastian 2009-01-29 16:50:17

0

的Rails僅使用,當你使用的是寧靜的路線/鏈接幫手

def to_params 
end 

URL生成器。我知道的唯一方法就是和你的做法類似,除非你願意放棄你的英語語言鏈接,並用德語完成。在這種情況下,只需刪除命名的路由行並將to_params更改爲使用數據庫中正確的名稱字段即可。此時,REST路由應該正常運行。