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

时间:2014-02-01 07:00:30

标签: ruby-on-rails routes

此路线设定

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中的预期行为吗? 我应该分别写每个资源吗?

1 个答案:

答案 0 :(得分:6)

您需要指定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