为什么出现以下错误?

时间:2017-04-03 17:18:41

标签: ruby-on-rails ruby-on-rails-4 rails-routing

我正在构建一个像

这样的嵌套资源
 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总是如此 &#34; URL&#34;:&#34; http://localhost:3000/blogs/1/comments.json&#34;

我想得到类似的东西 &#34; URL&#34;:&#34; http://localhost:3000/blogs/1/comments/2.json&#34;

1 个答案:

答案 0 :(得分:1)

如果您执行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)