在RESTful路由中获取基于“名称”的URL而不是基于id的URL

时间:2010-01-01 20:20:00

标签: ruby-on-rails rest routing

如果我为控制器“画廊”实现RESTful路由,如下所示:

map.resources :galleries 

默认情况下,此控制器的show url为:

/galleries/:id 

将响应对/ galleries / 1等的任何请求。

如果我在数据库中有一个带有'name'属性并且值为'portraits'的图库记录怎么办? 我可以这样做:

/galleries/portraits 

而不是

/galleries/1 ?

2 个答案:

答案 0 :(得分:2)

在您的Gallery模型中,添加一个#to_param方法,该方法可返回您在网址中所需的内容(在本例中为name)。在您的控制器中,您仍然可以通过params[:id]访问该值,并且您可能必须使用Gallery#find_by_name而不是Gallery#find

只要您使用提供的帮助程序(gallery_path等),您的网址就应该很漂亮。

答案 1 :(得分:0)

然后,您必须考虑如果图库名称不像URL那样友好,例如'Autumn / Fall2009#1',您有正斜杠(将更改路由)和破折号(不会提交)到服务器,如果没有编码)。因此,在生成此类网址时,您需要使用urlencoding。