如果我为控制器“画廊”实现RESTful路由,如下所示:
map.resources :galleries
默认情况下,此控制器的show url为:
/galleries/:id
将响应对/ galleries / 1等的任何请求。
如果我在数据库中有一个带有'name'属性并且值为'portraits'的图库记录怎么办? 我可以这样做:
/galleries/portraits
而不是
/galleries/1 ?
答案 0 :(得分:2)
在您的Gallery
模型中,添加一个#to_param
方法,该方法可返回您在网址中所需的内容(在本例中为name
)。在您的控制器中,您仍然可以通过params[:id]
访问该值,并且您可能必须使用Gallery#find_by_name
而不是Gallery#find
。
只要您使用提供的帮助程序(gallery_path
等),您的网址就应该很漂亮。
答案 1 :(得分:0)
然后,您必须考虑如果图库名称不像URL那样友好,例如'Autumn / Fall2009#1',您有正斜杠(将更改路由)和破折号(不会提交)到服务器,如果没有编码)。因此,在生成此类网址时,您需要使用urlencoding。