Rails 3中默认资源路由中的通配符



在我的Rails应用程序中有以下路由:

resources :photos
get "/photos/*id/stats" => "photos#stats"
get "/photos/*id/visitors" => "photos#visitors"

id参数是一个通配符,允许使用像斜杠这样的特殊字符。基本上,"/photos/img/trial.jpg/stats"应该路由到photos_controller中的stats方法,照片id为"img/trial.jpg"。这部分工作正常

然而,我不确定如何在由"resources:tags"创建的默认路由中使用通配符匹配id,这是基本的CRUD路由,如"/photos/:id/edit" => "photos#edit"。

是否有一种更简洁的方法来使用通配符匹配默认资源路由,而不是不使用资源路由并显式指定这些路由?

你应该能够做一些像

resources :photos
get "/photos/:slug/stats" => "photos#stats"
get "/photos/:slug/visitors" => "photos#visitors"

我猜你使用的是friendy_id

正如Rails指南和上面的答案中所解释的那样,您通常使用冒号符号。指南称它们为动态段

这些在您的情况下不能正常工作,因为默认情况下它们不允许使用点(点是用来指定查询格式的)。您可以通过指定自己的约束

来覆盖默认行为。
get "/photos/:id/stats" => "photos#stats", id: /[^/]+/

例如,这只允许在id中使用/。斜杠是不允许的,因为这样我们就没有办法检测到尾随的/stats。您可以转义斜杠或将它们替换为url中的其他内容。另一个答案提到了友好的id gem,这可能是一个很好的自动化方法(尽管我没有使用它)。

最新更新