为什么会出现以下错误?

Why the following error?

我正在构建一个嵌套资源,例如

 resources :blogs do
    resources :comments
  end

当我访问以下内容时

blogs/1/comments/2,我收到错误

undefined method `comment_url' for #<#<Class:0x4173108>:0x43b45d8>

这里是里面的代码views\comments_comment.json.jbuilder

json.url comment_url(comment, format: :json)

如何修复?

根据建议进行编辑

json.url blog_comments_url(comment.blog, comment, format: :json)

然而 URl 我得到的总是 "url":"http://localhost:3000/blogs/1/comments.json"

我想得到类似的东西 "url":"http://localhost:3000/blogs/1/comments/2.json"

如果您执行 rake routes,您应该会看到如下内容:

    blog_comments GET    /blogs/:blog_id/comments(.:format)          comments#index                                     
                  POST   /blogs/:blog_id/comments(.:format)          comments#create                                    
 new_blog_comment GET    /blogs/:blog_id/comments/new(.:format)      comments#new                                       
edit_blog_comment GET    /blogs/:blog_id/comments/:id/edit(.:format) comments#edit                                      
     blog_comment GET    /blogs/:blog_id/comments/:id(.:format)      comments#show                                      
                  PATCH  /blogs/:blog_id/comments/:id(.:format)      comments#update                                    
                  PUT    /blogs/:blog_id/comments/:id(.:format)      comments#update                                    
                  DELETE /blogs/:blog_id/comments/:id(.:format)      comments#destroy                                   
            blogs GET    /blogs(.:format)                            blogs#index                                        
                  POST   /blogs(.:format)                            blogs#create                                       
         new_blog GET    /blogs/new(.:format)                        blogs#new                                          
        edit_blog GET    /blogs/:id/edit(.:format)                   blogs#edit                                         
             blog GET    /blogs/:id(.:format)                        blogs#show                                         
                  PATCH  /blogs/:id(.:format)                        blogs#update                                       
                  PUT    /blogs/:id(.:format)                        blogs#update                                       
                  DELETE /blogs/:id(.:format)                        blogs#destroy                                      

第一列的路径助手名称没有 _url_path 后缀。

您的 :comments 资源嵌套在您的 :blogs 资源中,因此助手名称也嵌套:

  • blog_comments 不是 comments
  • new_blog_comment 不是 new_comment
  • ...

所以您要找的帮手是blog_comment_url。此外,由于资源是嵌套的,帮助程序将评论和博客都作为参数:

json.url blog_comment_url(comment.blog, comment, format: :json)