2012-12-22 69 views
2

我遇到了構建漂亮的url路徑的情況。具有多個參數,可選參數和漂亮參數的路線

我有需要處理像URL的FilesController:

mydomain.com/files/path/dir1/dir2/user/bob 
mydomain.com/files/path/dir1/user/bob 
mydomain.com/files/path/dir1 
mydomain.com/files/user/bob 

在控制器方面,我想params[:path]包含/path/userparams[:user]之間的一切/user後包含任何東西(假設只有一個用戶,它的可選的)。

我正在尋找最好的方法來做到這一點,最好只有routes.rb文件中的一條語句。我認爲最棘手的部分是在/path之後,可能會提供一個實際的文件路徑N倍的深度。

回答

3

你想route globbing

match 'files/*path/user/:user' => 'user#files' 

您可能還需要添加額外的路線的情況下,沒有路徑:

match 'files/user/:user' => 'user#files' 
+0

我想我仍然需要另一條路線來覆蓋'mydomain.com/files/path/dir1'的情況。 – gylaz

+0

克里斯的鏈接上的錨已經改變:http://guides.rubyonrails.org/routing.html#route-globbing-and-wildcard-segments –

0

感謝Chris Heald's answer,我結束了這是怎麼回事,它適合場景:

match 'files/user/:user' => 'files#index' 
match 'files/path/*path/user/:user' => 'files#index' 
match 'files/path/*path' => 'files#index' 

還在想這是否這本來可以用單線處理。

+0

你可以使用'文件/路徑/ *路徑',然後嘗試如果你真的想要一行代碼,就可以在'params [:path]'末尾吸取一個用戶名。 –

+0

對此有何更新?我面臨着同樣的問題,不想爲同一件事情設置多條路線,就像上面所說的那樣。 –