在Rails 3.2中更改生成的EDIT路由以放置id _after_`edit`

时间:2013-06-24 00:20:24

标签: ruby-on-rails routes

正如Rails Guide on Routing中所解释的那样,资源丰富的路线声明,如

resources :photos

生成一系列路由和帮助程序。其中一条路线是

/photos/:id/edit

随之而来的是帮助器edit_photo_path(photo),它接受​​一个photo对象并返回用于编辑它的路径。 我到处都使用帮助者,希望他们继续按原样工作

嗯,由于各种原因,这个应用程序正在生成自定义ID,ID可能看起来像64/edit或看起来像64。这当然会导致问题,因为无论是约束还是调整

/photos/64/edit

要么被解释为#edit 64#show 64/edit,要么两者都不对。

我想要实现的解决方案是保持资源丰富的路由器的所有好处,包括能够将对象传递给路径助手,并且只需将Rails默认编辑路径更改为

/photos/edit/:id

然后所有路径都是明确的。是否有(相当简单和干净)的方法来做到这一点?

注意

  • 我有一个解决方法,所以请不要提供解决方法。
  • 任何解决方案都必须更新帮助程序,以便edit_photo_path(photo)生成/photos/edit/:id,并且还可以使用嵌套资源。例如,edit_magazine_photo_path(@magazine, @photo)会生成/magazines/:magazine_id/photos/edit/:id
  • 我有多个资源,所以我不想使用特殊覆盖来扩展我的routes.rb的大小。
  • 我知道我可以使用edit选项更改path_names部分的路径名。 (事实上​​,这就是我所做的,在重命名的编辑路径中放置一个永远不会出现在ID中的Unicode字符,但现在我让用户看到了我不喜欢的Unicode URL,这会失败一旦ID扩展为Unicode字符串。)
  • 我知道我可以编写自定义match规则,但这对于嵌套资源来说非常繁琐和困难,特别是在生成捕获对象的路径助手时。
  • 我读了问题的答案"删除编辑后缀为url"但实际上,该答案不会删除编辑后缀,而是会更改URL的不同部分。
  • 我真的想深入了解资源丰富的路由生成的内部工作方式,尤其是URL帮助程序,以便我可以在路径中切换editid的顺序。

0 个答案:

没有答案