Rails 3路由如何匹配多个



如何匹配多个控制器,例如一个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'

相关内容

  • 没有找到相关文章

最新更新