2015-08-14 74 views
1

我在我的Rails应用程序以下途径默认资源路线:通配符在Rails 3中

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

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

但是,我不知道如何在由“resources:tags”创建的默认路由中使用通配符匹配,这是“/ photos /:id/edit”=>“photos#编辑的基本CRUD路由”。

有没有更清晰的方式来使用通配符匹配默认资源路由,而不是使用资源路由并明确指定这些路由?

回答

1

你应该能够做到像

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

我猜你正在使用类似friendy_id

0

正如Rails guide解释及以上的答案,你平时用冒号符号。该指南称其为动态细分市场

但是,这些不会按照您的预期工作,因为它们默认情况下不允许使用点(点仅用于指定查询的格式)。您指定自己的约束

get "/photos/:id/stats" => "photos#stats", id: /[^\/]+/ 

例如,这覆盖默认行为,只有在ID不允许/。斜杠不能被允许,因为那时我们将无法检测到尾随/stats。你可能会跳过斜杠或用URL替换它们。另一个答案提到the friendly id gem,这可能是一个很好的方式来自动化(虽然我没有使用它)。