2010-01-01 40 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