【问题标题】:getting a 'name' based URL in RESTful routes instead of an id based url在 RESTful 路由中获取基于“名称”的 URL,而不是基于 id 的 URL
【发布时间】:2010-12-31 15:54:38
【问题描述】:

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

map.resources :galleries 

默认情况下,此控制器的显示网址为:

/galleries/:id 

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

如果我在数据库中有一个画廊记录,其“名称”属性的值为“肖像”,该怎么办。 我可以这样做吗:

/galleries/portraits 

而不是做

/galleries/1 ?

【问题讨论】:

    标签: ruby-on-rails rest routing


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      然后您必须考虑如果画廊名称不是非常适合 URL 的名称,例如“Autumn/Fall2009#1”,其中您有一个正斜杠(将更改路由)和一个破折号(不会被提交)会发生什么如果未编码,则发送到服务器)。因此,在生成此类 URL 时,您将需要 urlencoding。

      【讨论】:

      • 啊,我明白你的意思了,现在我明白了为什么没有内置该选项,但我只是为自己制作一个简单的照片博客,我自己负责添加画廊,所以这不是问题。
      猜你喜欢
      • 1970-01-01
      • 2023-01-13
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 2011-02-27
      • 2018-08-20
      • 2015-03-06
      • 2020-10-09
      相关资源
      最近更新 更多