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
我希望它有效:)
谷歌“轨道浅路”获取有关此信息。