2012-06-29 36 views
6

假設我想在我的網站上有一個Rails 3的博客,它將是我唯一擁有的博客。我想使用Rails來實現它,但我不喜歡Rails生成的URL。我想的網址是這樣的:沒有控制器名稱的Rails 3 URL

example.com/2012/05/10/foo

我不希望這樣的事情,我知道怎麼做(與to_param):

example.com/entries/2012/05/10/foo

我仍然想使用幫手像

new_entry_path(@entry) # -> example.com/new 
entry_path(@entry) # -> example.com/2012/05/10/foo 
edit_entry_path(@entry) # -> example.com/2012/05/10/foo/edit 
destroy_entry_path(@entry) 
form_for(@entry) 
link_to(@entry.title, @entry) 

等等。然後,我將有意見,並希望讓他們爲自己的資源過於接近,像

example.com/2012/05/10/foo/comments/5

這些URL也應該能夠獲得與正常助手:

edit_entry_comment_path(@entry, @comment) # -> example.com/2012/05/10/foo/comments/5/edit 

什麼像那樣。

那麼有可能獲得沒有控制器名稱的URL並仍然使用url helper方法?只需要覆蓋to_param就會改變url中控制器名稱後面的部分。獲得一些示例代碼會非常有幫助。

回答

13

routes.rb可能有一條線是這樣的:

resources :entries 

產生形式/entries/2012/05/10/foo途徑。


存在一個:path參數,可使用的東西,除了默認的名稱entries。例如:

resources :entries, :path => 'my-cool-path' 

將產生形式爲/my-cool-path/2012/05/10/foo的路線。


但是,如果我們傳遞一個空字符串:path,我們看到你正在尋找的行爲:

resources :entries, :path => '' 

會產生形式/2012/05/10/foo途徑。

+2

爲什麼這會被投票?這是正確的答案... – jaredonline

+0

是的,我試圖自己解決這個問題 - 而不僅僅是一個,而是兩個!也許這是對解決方案表面上粗略的反對(我可以看到直覺指示路線將會是'// 2012/05/10/foo',並帶有一個額外的前斜線),但它絕對有效,而且絕對更容易,更多的Rails-y比手工重新實現所有足智多謀的路線。 – Matchu

+0

是的。當我到達這裏時是-3。也許是因爲你指定的路線實際上沒有/年/月/日的東西? – jaredonline

相關問題