正如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
。edit
选项更改path_names
部分的路径名。 (事实上,这就是我所做的,在重命名的编辑路径中放置一个永远不会出现在ID中的Unicode字符,但现在我让用户看到了我不喜欢的Unicode URL,这会失败一旦ID扩展为Unicode字符串。)match
规则,但这对于嵌套资源来说非常繁琐和困难,特别是在生成捕获对象的路径助手时。edit
和id
的顺序。