示例我已将路由配置为
match '/cellphones/:permalink/:charger', :controller => 'mycontroller', :action => 'myaction'
resources :cellphones
当我放置localhost/cellphones/nokia3323/lion
之类的东西时,一切都还可以但我无法编辑手机,因为它具有相同的结构localhost/cellphones/edit/4
答案 0 :(得分:1)
先前定义的路由优先,因此您可以通过撤消已声明路由的顺序来再次访问编辑路由。由于/cellphones/edit/:id
的路由比{{1}更具限制性如果路线的第二部分是“编辑”,则编辑路线将匹配,如果是其他路线,则会传递到您的其他路线。
但是,您很可能实际上没有/cellphones/:permalink/:charger
路由,因为/cellphones/edit/:id
创建的内容是resources :cellphones
,因为两者都很难区分/cellphones/:id/edit
将路径的通配符部分作为第二段。
解决问题的最简单方法是更改/cellphones/:permalink/:charger
路线,以便更容易区分。您可以使用类似/cellphones/:permalink/:charger
(永久链接的“p”)或其他任何易于与/cellphones/p/:permalink/:charger
创建的RESTful路由区别开来的内容。
还有一些其他方法可以处理它,例如使用segment contraints或adding more restful actions。
答案 1 :(得分:0)
我找到了解决方案,只需更改顺序
resources :cellphones
match '/cellphones/:permalink/:charger', :controller => 'mycontroller', :action => 'myaction'