Rails路由嵌套资源的索引

时间:2014-05-16 13:33:12

标签: ruby-on-rails indexing routes

我正在搜索rake routes与我的嵌套资源的index路径不匹配的原因。

这是我的代码:

namespace :api do
  resources :photos do
    resource :comments
  end
end

以下是命令的结果:rake routes | grep comment

           batch_action_admin_user_comments POST       /admin/user_comments/batch_action(.:format)            admin/user_comments#batch_action
                        admin_user_comments GET        /admin/user_comments(.:format)                         admin/user_comments#index
                                            POST       /admin/user_comments(.:format)                         admin/user_comments#create
                     new_admin_user_comment GET        /admin/user_comments/new(.:format)                     admin/user_comments#new
                    edit_admin_user_comment GET        /admin/user_comments/:id/edit(.:format)                admin/user_comments#edit
                         admin_user_comment GET        /admin/user_comments/:id(.:format)                     admin/user_comments#show
                                            PATCH      /admin/user_comments/:id(.:format)                     admin/user_comments#update
                                            PUT        /admin/user_comments/:id(.:format)                     admin/user_comments#update
                                            DELETE     /admin/user_comments/:id(.:format)                     admin/user_comments#destroy
                             admin_comments GET        /admin/comments(.:format)                              admin/comments#index
                                            POST       /admin/comments(.:format)                              admin/comments#create
                              admin_comment GET        /admin/comments/:id(.:format)                          admin/comments#show
                         api_photo_comments POST       /api/photos/:photo_id/comments(.:format)               api/comments#create
                     new_api_photo_comments GET        /api/photos/:photo_id/comments/new(.:format)           api/comments#new
                    edit_api_photo_comments GET        /api/photos/:photo_id/comments/edit(.:format)          api/comments#edit
                                            GET        /api/photos/:photo_id/comments(.:format)               api/comments#show
                                            PATCH      /api/photos/:photo_id/comments(.:format)               api/comments#update
                                            PUT        /api/photos/:photo_id/comments(.:format)               api/comments#update
                                            DELETE     /api/photos/:photo_id/comments(.:format)               api/comments#destroy

我尝试将only: [:create, :index]添加到我的comments资源,但只有create路由可见。

根据有关nested-resources的文件,我不明白发生了什么。

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

这是因为您使用的是singular resourceresource :comments

来自文档:

  

有时,您拥有一个客户端始终无需查找的资源   引用ID。例如,您希望/ profile始终显示   当前登录用户的配置文件。在这种情况下,您可以使用   一个奇异的资源来映射/配置文件(而不是/profile/:id)   显示行动

您需要使用标准resources方法才能使其正常工作(resource忽略index操作):

#config/routes.rb
namespace :api do
  resources :photos do
    resources :comments
  end
end

答案 1 :(得分:0)

我的错误。 A" S"在我的资源上缺失了。

namespace :api do
  resources :photos do
    resources :comments
  end
end

现在它有效。