命名空间内的浅路由:path param不起作用

此路线设置

namespace :api, path: nil, except: [:new, :edit] do resources :blogs do resources :comments end end 

给了我这个,没关系。

 GET /blogs/:blog_id/comments(.:format) api/comments#index POST /blogs/:blog_id/comments(.:format) api/comments#create GET /blogs/:blog_id/comments/:id(.:format) api/comments#show PATCH /blogs/:blog_id/comments/:id(.:format) api/comments#update DELETE /blogs/:blog_id/comments/:id(.:format) api/comments#destroy GET /blogs(.:format) api/blogs#index POST /blogs(.:format) api/blogs#create GET /blogs/:id(.:format) api/blogs#show PATCH /blogs/:id(.:format) api/blogs#update DELETE /blogs/:id(.:format) api/blogs#destroy 

但是当我在上面的设置中添加“shallow:true”时

 namespace :api, path: nil, except: [:new, :edit] do resources :blogs, shallow: true do resources :comments end end 

一个不需要的路径’/ api’出现了。

 /api/blogs/:blog_id/comments(.:format) api/comments#index /api/blogs/:blog_id/comments(.:format) api/comments#create /api/comments/:id(.:format) api/comments#show /api/comments/:id(.:format) api/comments#update /api/comments/:id(.:format) api/comments#destroy /blogs(.:format) api/blogs#index /blogs(.:format) api/blogs#create /api/blogs/:id(.:format) api/blogs#show /api/blogs/:id(.:format) api/blogs#update /api/blogs/:id(.:format) api/blogs#destroy 

这是Rails 4中的预期行为吗? 我应该分别写每个资源吗?

您需要指定shallow_path

 namespace :api, path: nil, shallow_path: nil, except: [:new, :edit] do resources :blogs, shallow: true do resources :comments end end 

给你这个:

  Prefix Verb URI Pattern Controller#Action blog_comments GET /blogs/:blog_id/comments(.:format) api/comments#index POST /blogs/:blog_id/comments(.:format) api/comments#create api_comment GET /comments/:id(.:format) api/comments#show PATCH /comments/:id(.:format) api/comments#update PUT /comments/:id(.:format) api/comments#update DELETE /comments/:id(.:format) api/comments#destroy api_blogs GET /blogs(.:format) api/blogs#index POST /blogs(.:format) api/blogs#create api_blog GET /blogs/:id(.:format) api/blogs#show PATCH /blogs/:id(.:format) api/blogs#update PUT /blogs/:id(.:format) api/blogs#update DELETE /blogs/:id(.:format) api/blogs#destroy