2010-01-01 36 views
1

一個「名稱」基於URL如果我實現了一個控制器「畫廊」的RESTful路由就像如下:越來越REST風格的路線,而不是基於ID的URL

map.resources :galleries 

默認情況下,該控制器顯示URL將是:

/galleries/:id 

這將任何要求作出反應/畫廊/ 1等

如果我在數據庫中的畫廊記錄與「名」,值爲「肖像」屬性。 我可以做同樣的,如下所示:

/galleries/portraits 

而不是做

/galleries/1 ? 

回答

2

在您的Gallery模型中,添加一個#to_param方法,該方法在URL中返回所需內容(在本例中爲name)。在您的控制器中,您仍然可以通過params[:id]訪問該值,並且您可能必須使用Gallery#find_by_name而不是Gallery#find

只要您使用提供的幫助程序(gallery_path等),您的URL應該很漂亮。

0

然後,你要想到會發生什麼,如果庫名稱是什麼不是很URL友好像「秋/ Fall2009 #1',你有一個正斜槓(將改變路由)和一個破折號(如果未編碼,將不會提交給服務器)。因此,在生成此類網址時您需要使用urlen編碼。

+0

啊我明白了你的觀點,現在我明白了爲什麼這個選項不是內置的,但我只是爲自己製作一個簡單的photoblog,並且不負責自己添加畫廊,所以這不是一個問題。 – udit 2010-01-01 21:03:08