2010-07-23 35 views
1

我一直在使用以下路線成功在我的Rails應用2.X:是否有可能在Rails 2.x中創建類似'〜:id'的路由?

map.user ':id', :controller => 'users', :action => 'show' 

這一點,因爲我的最低路線,正確地抓住東西像/tsmango並呈現Users#show

現在我想添加第二個,類似的路徑,如:

map.post '~:id', :controller => 'posts', :action => 'show' 

,因爲無論我的用戶或我的職位允許包含〜因爲這條路線會出現在我的map.user路線以上,我認爲這將正確地捕捉到從/~開始的任何呼叫,並呈現我的Posts#show操作。不幸的是,我無法讓這個工作。

有趣的是,這種類似的路線完美的作品:

map.post ':id~', :controller => 'posts', :action => 'show' 

雖然,我當然願意去與':id~',因爲它具有相同的效果,在這一點上我真的只是沮喪和好奇至於如何建立一條匹配'~:id'的路線。

值得一提的是,我不想修改我的to_param方法或我的實際用戶併發布slugs以包含prepended〜。我只是想通過一條路線來指出哪個行爲應該處理它。除非我錯了,否則這就排除了類似的用法:

:requirements => {:id => /\~[a-zA-Z0-9]/} 

非常感謝您提供的任何幫助!

更新:我知道路由優先級,並在上面聲明,我將'~:id'路由放置在':id'路由的上方。我收到以下錯誤試圖生成的URL像post_path(@post)

You have a nil object when you didn't expect it! 
The error occurred while evaluating nil.to_sym 

回答

1

路線都取決於在他們聲明的順序給予優先權。
當您首先定義:id路由時,第二個永遠不會執行。

爲了達到這個目的,你只需要先定義〜:id路徑然後是:id一個。

map.post '~:id', :controller => 'posts', :action => 'show' 
map.post ':id', :controller => 'users', :action => 'show' 
+0

是的,我知道他們優先。我在上面提到,我將'〜:id'路線放在':id'路線的上方,但我仍然無法完成這項工作。 我收到此錯誤: 當你沒有想到它時,你有一個零對象!評估nil.to_sym時發生錯誤 當我嘗試使用如下路線: link_to('Test',post_path(@post)) – tsmango 2010-07-23 17:33:26

相關問題