在下面的示例中,路线已经确定为已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
答案 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节。
在介绍段落中说明的地方:
避免深度嵌套的一种方法(如上所述)是生成 在父级下限定的集合操作,以便有意义 层次结构,但不嵌套成员操作。换一种说法, 仅构建具有最少信息量的路由 唯一标识资源......