RESTful路由中的控制器名称是否可选?

使用标准的map.resource路由机制和几个嵌套资源,生成的路由不必要地长。 请考虑以下路线:

 site.org/users/pavelshved/blogs/blogging-horror/posts/12345 

routes.rb创建很容易,我确信它遵循某种有益的路由逻辑。 但它太长了,似乎也不是人类可读的。

一个很好的改进是删除控制器名称,所以它看起来像:

 site.org/pavelshved/blogging-horror/12345 

清晰,简单,简短。 它可能变得模棱两可,但在我的情况下,我不会为任何用户“用户”命名。

我尝试设置:as => '' ,但它产生这样的路由: site.org//pavelshved//blogging-horror//12345由标准助手生成它们。

有没有办法以这种方式映射资源,控制器名称是否可选?

您正在寻找资源的:path_prefix选项。

 map.resources :users do |user| user.resources :blogs do |blog| blog.resources :posts, :path_prefix => '/:user_login/:blog_title/:id' end end 

将为此表格的所有博客提供宁静的路线: site.org/pavelshved/bogging-horror/posts/1234 。 你需要付出额外的努力才能使用url helper,但是你自己的包装器无法快速修复。

摆脱url的post部分的唯一方法是使用命名路由,但那些需要一些重复才能使其变得安静。 当你尝试使用路由助手时,你会遇到同样的问题。

获得所需内容的最简单方法是创建一条路线,以及充当速记的RESTful路线:

 map.short_blog ':user_id/:blog_id/:id', :controller => 'posts', :action => 'show' 

您必须更改URL位才能使用如何过滤用户名和博客名称。 但是当你想使用较短的URL时,你可以使用所有的short_blog_ *魔法。

直接超出默认路由.rb:

 map.connect 'products/:id', :controller => 'catalog', :action => 'view' 

你可以写:

 map.connect ':user_id/:blog_id/:id', :controller => 'posts', :action => 'show' 

但是一定要把它包含在文件的最后,否则它会尝试将每三个级别的深层URL匹配到它。

试试这个

 map.pavelshved '/pavelshved/', :controller => :users, :action => view or map.pavelshved '/:id', :controller => :users, :action => show do | blogs| blogs.bloging '/:id', :controller => :blogs, :action => show do | post| post.posting '/:id', :controller => :posts, :action => show end end 

我希望它有效:)

谷歌“轨道浅路”获取有关此信息。