在Rails路由中,shallow_path有什么作用?

时间:2017-04-24 20:56:49

标签: ruby-on-rails routes

在下面的示例中,路线已经确定为已foo范围,以便任何网址都遵循www.app/foo/...的模式?为什么仍然需要shallow_path?它做了什么?

Procore::Application.routes.draw do
  # Nontab routes
  scope ':foo', :shallow_path => ':foo' do
    get '/.../:id',  :to => '...#show', :as => '...'
  end
end

1 个答案:

答案 0 :(得分:1)

在这种情况下,shallow_path不会执行任何操作。

你是对的,因为scope路线已经在/:foo/.../:id

shallow选项的重点是使resources路由仅使用:index, :new:create作为深层嵌套路由,并且不要深入使用:show:edit:update:destroy的嵌套路线。

shallow_path参数允许您指定要添加到成员路由的前缀。

来自文档:

scope shallow_path: "sekret" do
  resources :articles do
    resources :comments, shallow: true
  end
end

会产生这些路线:

HTTP Verb   Path    Controller#Action   Named Helper
GET         /articles/:article_id/comments(.:format)    comments#index  article_comments_path
POST        /articles/:article_id/comments(.:format)    comments#create article_comments_path
GET         /articles/:article_id/comments/new(.:format)comments#new    new_article_comment_path
GET         /sekret/comments/:id/edit(.:format)         comments#edit   edit_comment_path
GET         /sekret/comments/:id(.:format)              comments#show   comment_path
PATCH/PUT   /sekret/comments/:id(.:format)             comments#update  comment_path
DELETE      /sekret/comments/:id(.:format)            comments#destroy  comment_path

请注意/sekret/路线前面member的位置,但不在collection行为的前面。

请参阅Rails Routing Docs中的第2.7.2节。

在介绍段落中说明的地方:

  

避免深度嵌套的一种方法(如上所述)是生成   在父级下限定的集合操作,以便有意义   层次结构,但不嵌套成员操作。换一种说法,   仅构建具有最少信息量的路由   唯一标识资源......