2011-02-28 129 views
0

我已經設置了自定義路由,它似乎工作。但是,對於同一個控制器,我也有資源路由。我想我只是在做錯事,但我不知道它是什麼。我誠實地剽竊路線,因爲我仍然對如何設置以及何時使用什麼方法感到困惑。自定義路由以及資源路由

這是我現在處理的路線。

resources :shows 
match "shows/:country" => "shows#index" 

像這樣的路線是資源:顯示工作得很好,但不匹配。如果我翻轉他們的比賽路線工作正常,但資源:節目不。

我應該將它作爲命名空間路由嗎?我不完全確定我應該做什麼。我試圖完成的是這樣的事情。

http://site.com/shows/canada 

這將返回所有Candian節目。

任何幫助表示讚賞。

回答

2

你可能想要做的是使用constraints,或者甚至可以使用custom constraints class。這裏有一個粗略的開始,我還沒有測試,我不能確定它是否會工作:

resources :shows, :constraints => { :id => /[0-9]+/ } 
match "shows/:country" => "shows#index", :constraints => { :country => /[a-z]+/ } 

注意,通常這會通過GET查詢參數進行,例如http://example.com/shows?country=canada,這將已經轉到您的shows#index操作並將params[:country]設置爲"canada"

+1

是的,我通常應該通過查詢字符串來理解,但我需要這樣做。它的代碼種類破壞了edit_show_path幫助器,但不是new_show_path。那是因爲:資源顯示行的id約束? – percent20 2011-02-28 00:41:26

+0

手動訪問編輯路徑是否工作(例如'/ edit/1')?還是僅僅是破壞了路徑生成的幫手? – 2011-02-28 00:45:15

+0

該路徑起作用,但生成的幫助程序沒有。 – percent20 2011-02-28 00:49:43

0

您可能會被默認路由咬住,該路由期望/{controller}/{action}和相應的路由。嘗試刪除默認路由。您必須確保聲明所有路線,但結果是爲您的應用程序提供更可預測的一組路線。

+0

我正在考慮採取這種方法,但如果可以的話,我想避免它。 – percent20 2011-02-28 00:41:56