いつもお世話になっています。
私はRails初心者で、現在Rails5を使って、多くのユーザーが記事を投稿できるWikiブログを作っています。
今回、「railsとjsを使ったお手軽「いいね♡機能」」という記事を参考に、各記事(articles/show.html.erb)にいいねボタンの設置といいねの合計数を表示させようとしていますが、以下の2つの問題が発生しています。
- Ajaxが上手く働かず、ページを再読み込みしないと、いいねの合計数が反映されない
- いいねを取り消す時に、deleteが動かない(No route match DELETEと表示される」
コードは以下のようになっています。
route.rb
resources :articles do resources :likes, only: [:create, :destroy] end
articles/show.html.erb(いいねを表示させたい場所)
<%= render partial: 'likes/like', locals: { article: @article, likes: @likes } %>
likes_contorollers.rb(いいねのコントローラー)
class LikesController < ApplicationController def create @like = Like.create(user_id: current_user.id, article_id: params[:article_id]) @likes = Like.where(article_id: params[:article_id]) end def destroy like = Like.find_by(user_id: current_user.id, article_id: params[:article_id]) like.destroy @likes = Like.where(article_id: params[:article_id]) end end
likes/_like.html.erb(部分テンプレート)
<% if user_signed_in? %> <% if article.like_user(current_user.id) %> <%= button_to article_likes_path(likes, article_id: article.id), method: :delete, id: "like-button", remote: true do %> いいねしたよ <span> <%= article.likes_count %> </span> <% end %> <% else %> <%= button_to article_likes_path(article), id: "like-button", remote: true do %> いいね <span> <%= article.likes_count %> </span> <% end %> <% end %> <% else %> いいね <span> <%= article.likes_count %> </span> <% end %>
likes/create.js.erb
$("#like-button").html("<%= j(render partial: 'like', locals: { article: @article, likes: @likes, like: @like}) %>")
likes/destroy.js.erb
$("#like-button").html("<%= j(render partial: 'like', locals: { article: @article, likes: @likes })
長文になりましたが、よろしくお願いいたします。
あなたの回答
tips
プレビュー