Rails 3路由如何匹配多个?

如何匹配多个控制器,例如id?

我在我的路线上试过这个:

match '/:id' => 'kategoris#show' match '/:id' => 'tags#show' 

如果您想匹配http://example.com/则Rails控制器路由不适合您。

你可以创建一个ThingsController:

 match '/:id' => 'things#show' 

然后在你的ThingsController中做一些合适的事情。

例如。 在Sinatra(你可以作为Rack中间件安装)你会这样做:

 get "/:id" do :id if(@tag = Tag.find(:id)) haml :tag elsif(@category = Category.find(:id)) haml :category else pass #crucially passes on saying 'not found anything'. end end 

无论哪种方式,你都会从RESTful Rails的传教士那里得到一阵痛苦的尖叫声。

如果您可以在标记ID和类别ID中实现可识别的差异,那么您可以使用约束来查找它们。 例如,如果类别总是以数字开头而标签从不这样做,那么您可以这样做。

 match '/:id' => 'categories#show', :constraints => { :id => /^\d+/ } match '/:id' => 'tags#show' 

第一行仅在以下情况下匹配:id以数字开头。 如果不匹配,则第二行捕获剩余物。 所以; /67-something被路由到类别控制器和/something被路由到标签控制器。

 match 'kategoris/:id' => 'kategoris#show' match 'tags/:id' => 'tags#show' 

要么

 match '/:id/kategoris' => 'kategoris#show' match '/:id/tags' => 'tags#show'