如果您想要匹配
如何匹配多个控制器,例如一个id?
我在我的路线上尝试过:
match '/:id' => 'kategoris#show'
match '/:id' => 'tags#show'
http://example.com/<something>
,那么Rails控制器路由不适合您。
您可以创建一个ThingsController:
match '/:id' => 'things#show'
然后在ThingsController中执行适当的操作。
例如。在Sinatra(您可以将其安装为机架中间件(中,您可以这样做:
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'