前提・実現したいこと
こんにちは、閲覧ありがとうございます
タイトル通りいいね機能を非同期で実装している最中です
私は初心者です。知識不足で恐縮ですが問題点のご教授をお願いします
発生している問題・エラーメッセージ
いいね機能を非同期実装したところいいねを取り消す(delete)はできるのですが
いいねをする(post)が非同期になりません
ターミナル ActionView::Template::Error (No route matches {:action=>"destroy", :controller=>"likes", :post_id=>#<Post id: 22, title: "test", body: "ssss", video: "001-sibutomo.mp3", user_id: 1, created_at: "2020-09-25 14:15:58", updated_at: "2020-09-25 14:15:58">}, missing required keys: [:id]): 1: - if current_user.already_liked?(@post) 2: = link_to icon('fa', 'heart'),post_like_path(@post),class: "Like", method: :delete, remote: true 3: = @post.likes.count 4: - else 5: = link_to icon('far', 'heart'),post_likes_path(@post),class: "Like",method: :post, remote: true app/views/likes/_like.html.haml:2 app/views/likes/create.js.erb:1 エラーメッセージ
検証 POST http://localhost:3000/posts/22/likes 500 (Internal Server Error)
該当のソースコード
views/likes/_like.html.haml - if current_user.already_liked?(@post) = link_to icon('fa', 'heart'),post_like_path(@post),class: "Like", method: :delete, remote: true = @post.likes.count - else = link_to icon('far', 'heart'),post_likes_path(@post),class: "Like",method: :post, remote: true = @post.likes.count
views/post/show.html.haml .player__main__contents__menus__content %div{id: "like_buttons_#{@post.id}"} = render partial: "likes/like", locals: {post: @post}
views/likes/create.js.erb(deleteも同様のコード) $('#like_buttons_<%= @post.id %>').html("<%= j(render partial: 'like', locals: {post: @post}) %>")
likes_controller.rb class LikesController < ApplicationController before_action :set_post def create @like = current_user.likes.create(post_id: params[:post_id]) end def destroy @like = Like.find_by(post_id: params[:post_id], user_id: current_user.id) @like.destroy end private def set_post @post = Post.find(params[:post_id]) end end
試したこと
いいねを押したところデリートのアクションが選ばれていたので、views/likes/_like.html.hamlのifの前に別にIDをもうけました
ただこの方法だと1つデリートされたものだけが増えただけでした
補足情報(FW/ツールのバージョンなど)
Rails 6.0.3.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。