2017-05-10 17 views
0

私はレールアプリケーションにact_as_votable gemを実装しようとしています。私はブログモデルで作業するようにしましたが、コメントモデルは私が立ち往生した場所です。私はそれを実行しようとすると、undefined method like_comment_path'`を取得します。それはブログのように生成されるルートがないためです。ここで多相関連のネストされたルート

は、ルートファイルです:ブログのインデックスに

resources :blogs do 
    member do 
     put 'like', to: 'blogs#upvote' 
     put 'dislike', to: 'blogs#downvote' 
    end 
    resources :comments 
     member do 
     put 'like', to: 'comments#upvote' 
     put 'dislike', to: 'comments#downvote' 
     end 
    end 

、私はうまくパスのようなブログを呼び出すことができています。

<div class="btn-group"> 
    <%= link_to like_blog_path(blog), method: :put, class: "btn btn-default btn-sm" do %> 
     <span class="glyphicon glyphicon-chevron-up"></span> 
     Upvote 
     <%= blog.get_upvotes.size %> 
    <% end %> 
    <%= link_to dislike_blog_path(blog), method: :put, class: "btn btn-default btn-sm" do %> 
     <span class="glyphicon glyphicon-chevron-down"></span> 
     Downvote 
     <%= blog.get_downvotes.size %> 
    <% end %> 
    </div> 

コメント部分で困っています。

<div class="btn-group"> 
    <%= link_to like_comment_path(@commentable, comment), method: :put, class: "btn btn-default btn-sm" do %> 
     <span class="glyphicon glyphicon-chevron-up"></span> 
     Upvote 
     <%= comment.get_upvotes.size %> 
    <% end %> 
    <%= link_to dislike_comment_path(@commentable, comment), method: :put, class: "btn btn-default btn-sm" do %> 
     <span class="glyphicon glyphicon-chevron-down"></span> 
     Downvote 
     <%= comment.get_downvotes.size %> 
    <% end %> 
    </div> 

私がレーキルートを実行すると、コメントのためのものは表示されません。

Prefix Verb URI Pattern         Controller#Action 
        root GET /           glips#index 
       pages_home GET /pages/home(.:format)      pages#home 
      pages_about GET /pages/about(.:format)      pages#about 
      pages_contact GET /pages/contact(.:format)     pages#contact 
        tag GET /tags/:tag(.:format)      glips#index 
     new_user_session GET /login(.:format)       devise/sessions#new 
      user_session POST /login(.:format)       devise/sessions#create 
    destroy_user_session DELETE /logout(.:format)       devise/sessions#destroy 
     new_user_password GET /password/new(.:format)      devise/passwords#new 
     edit_user_password GET /password/edit(.:format)     devise/passwords#edit 
      user_password PATCH /password(.:format)       devise/passwords#update 
         PUT /password(.:format)       devise/passwords#update 
         POST /password(.:format)       devise/passwords#create 
cancel_user_registration GET /cancel(.:format)       devise/registrations#cancel 
    new_user_registration GET /register(.:format)       devise/registrations#new 
    edit_user_registration GET /edit(.:format)        devise/registrations#edit 
     user_registration PATCH/           devise/registrations#update 
         PUT /           devise/registrations#update 
         DELETE/           devise/registrations#destroy 
         POST /           devise/registrations#create 
       like_blog PUT /blogs/:id/like(.:format)     blogs#upvote 
      dislike_blog PUT /blogs/:id/dislike(.:format)    blogs#downvote 
      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 
         PUT /blogs/:id/like(.:format)     comments#upvote 
         PUT /blogs/:id/dislike(.:format)    comments#downvote 
        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 
        users GET /users(.:format)       users#index 
         GET /users/:id(.:format)      users#show 
        user GET /users/:id(.:format)      users#show 

コメントパスをルートで使用する方法を理解できません。私は間違って何をしていますか?

+0

実行 'すくいroutes'とあなたヒントを得るかもしれません:) – jdgray

+0

これは問題です。レイクルートはコメントのために何も表示せず、ブログだけが表示されます。私は私の質問を更新します。 – ddonche

+0

'resources:comments'を終了しているようにも見えません。 – jdgray

答えて

1

を入れ子にしていますか?コメントリソース内:ブログ?そうでなければ、あなたのルートは次のようになります。

resources :blogs do 
    member do 
    put 'like', to: 'blogs#upvote' 
    put 'dislike', to: 'blogs#downvote' 
    end 
end 
resources :comments do 
    member do 
    put 'like', to: 'comments#upvote' 
    put 'dislike', to: 'comments#downvote' 
    end 
end 

(注持っていたの先頭にを行うを逃す:奇妙なブロックエンディング/ネスティングが生じたコメントブロック)

+0

それはすべての問題でした。私はそれが入れ子の問題だと思っていました。そして、ええ、私はコメントを入れ子にしようとしていました。私はちょうど忘れてしまった、今それは動作します。 – ddonche

関連する問題