質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.75%

  • Ruby

    7006questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    6732questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • Ruby on Rails 4

    2380questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

投票機能(いいね機能)を二つつけたい

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 191

renren643

score 191

投票機能(いいね機能)を二つつけたいです。acts_as_votableのgemを使っているのですが、投稿にいいね機能、それに対するコメント自体にも投票機能をつけたいのですがどうしたらいいのでしょうか?「投稿にいいね機能」はできたのですが、「それに対するコメント自体にも投票機能」ができません。以下のようなエラーが出ます。
イメージ説明

以下、試したコードです。
songに投票とコメントをネストさせて、そのコメントにさらに投票機能をネストさせました。
↓routes.rb

resources :comments 
  devise_for :users

  resources :songs do
     member do
          put "like", to:    "songs#upvote"
        end

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

  end

  end

  root to: "songs#index"


↓コメントコントローラー

def upvote
    @comment = Comment.find(params[:id])
    @comment.upvote_by current_user
    redirect_to :back
  end

  def downvote
    @comment = Comment.find(params[:id])
    @comment.downvote_by current_user
    redirect_to :back
  end


  private
    def set_comment
      @comment = Comment.find(params[:id])
    end

    def comment_params
      params.require(:comment).permit(:song_id, :body, :user_id, :image)
    end


↓ビュー

<div class="btn-group pull-right">
              <%= link_to like_song_comment_path(@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_song_comment_path(@comment), method: :put, class: "btn btn-default btn-sm" do %>
                <span class="glyphicon glyphicon-chevron-down">
                Downvote
                <%= @comment.get_downvotes.size %>
              <% end %>
</div>


↓rake routes

comments GET    /comments(.:format)                            comments#index
                         POST   /comments(.:format)                            comments#create
             new_comment GET    /comments/new(.:format)                        comments#new
            edit_comment GET    /comments/:id/edit(.:format)                   comments#edit
                 comment GET    /comments/:id(.:format)                        comments#show
                         PATCH  /comments/:id(.:format)                        comments#update
                         PUT    /comments/:id(.:format)                        comments#update
                         DELETE /comments/:id(.:format)                        comments#destroy
        new_user_session GET    /users/sign_in(.:format)                       devise/sessions#new
            user_session POST   /users/sign_in(.:format)                       devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)                      devise/sessions#destroy
           user_password POST   /users/password(.:format)                      devise/passwords#create
       new_user_password GET    /users/password/new(.:format)                  devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format)                 devise/passwords#edit
                         PATCH  /users/password(.:format)                      devise/passwords#update
                         PUT    /users/password(.:format)                      devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)                        devise/registrations#cancel
       user_registration POST   /users(.:format)                               devise/registrations#create
   new_user_registration GET    /users/sign_up(.:format)                       devise/registrations#new
  edit_user_registration GET    /users/edit(.:format)                          devise/registrations#edit
                         PATCH  /users(.:format)                               devise/registrations#update
                         PUT    /users(.:format)                               devise/registrations#update
                         DELETE /users(.:format)                               devise/registrations#destroy
               like_song PUT    /songs/:id/like(.:format)                      songs#upvote
       like_song_comment PUT    /songs/:song_id/comments/:id/like(.:format)    comments#upvote
    dislike_song_comment PUT    /songs/:song_id/comments/:id/dislike(.:format) comments#downvote
           song_comments GET    /songs/:song_id/comments(.:format)             comments#index
                         POST   /songs/:song_id/comments(.:format)             comments#create
        new_song_comment GET    /songs/:song_id/comments/new(.:format)         comments#new
       edit_song_comment GET    /songs/:song_id/comments/:id/edit(.:format)    comments#edit
            song_comment GET    /songs/:song_id/comments/:id(.:format)         comments#show
                         PATCH  /songs/:song_id/comments/:id(.:format)         comments#update
                         PUT    /songs/:song_id/comments/:id(.:format)         comments#update
                         DELETE /songs/:song_id/comments/:id(.:format)         comments#destroy
                   songs GET    /songs(.:format)                               songs#index
                         POST   /songs(.:format)                               songs#create
                new_song GET    /songs/new(.:format)                           songs#new
               edit_song GET    /songs/:id/edit(.:format)                      songs#edit
                    song GET    /songs/:id(.:format)                           songs#show
                         PATCH  /songs/:id(.:format)                           songs#update
                         PUT    /songs/:id(.:format)                           songs#update
                         DELETE /songs/:id(.:format)                           songs#destroy
                    root GET    /                                              songs#index
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • mts10806

    2017/10/09 05:54

    エラーがでる理由がわからないのか、やりたいこと(コメントに対する投票)ができないのがわからないのか、わからない範囲、できている範囲を明示してください。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby

    7006questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    6732questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • Ruby on Rails 4

    2380questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。