1

正如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路径。
4

0 回答 0