前提・実現したいこと
いいね機能の非同期通信の実装にでのエラー
メルカリのようなフリマアプリの制作に取り組んでいますが、いいね機能の非同期通信による実装がうまくいきません。
リロードなしでいいねできるようにしたいです。
発生している問題・エラーメッセージ
現在、いいね機能を非同期通信で実装しているのですが、クリックすると下記のエラーが発生しました。
リロードするといいねが実行される現象が起きています。
どなたかご教授いただけたら助かります。
エラーメッセージ POST http://localhost:3000/items/28/likes 500 (Internal Server Error) ./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js.Rails.ajax @ rails-ujs.js:216 ./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js.Rails.handleRemote @ rails-ujs.js:652 (anonymous) @ rails-ujs.js:172
プレビューエラーメッセージ NameError in Likes#create Showing /Users/daikichi/projects/sense-34432/app/views/likes/create.js.erb where line #1 raised: undefined local variable or method `item' for #<#<Class:0x00007fe7111fma950>:0x00007fe747a86e58> Did you mean? @item
該当のソースコード
likes_controller.rb class LikesController < ApplicationController def create @item = current_user.likes.create(item_id: params[:item_id]) #current_userに結びついたいいねを作成 end def destroy @item = Item.find(params[:item_id]) @like = current_user.likes.find_by(item_id: @item.id) @like.destroy end end
index.html.erb <% @items.each do |item| %> `<省略>` <div class='fee-heart'> <div class='item-price'> <span>¥ <%= item.fee %>円</span> </div> <%= render partial: 'shared/like', locals:{item: item} %> </div> </div>
_like.html.erb <div class="heart-click" id="like_button_<%=item.id%>" > <% if current_user.liked_by?(item) %> <p class="heart-icon"> <%= link_to item_likes_path(item), method: :delete, remote:true do%> <i class="fas fa-heart"></i> <% end %> </p> <%else%> <p class="heart-icon"> <%= link_to item_likes_path(item), method: :post, remote:true do%> <i class="far fa-heart"></i> <% end %> </p> <% end %> <%= item.likes.count%> </div>
create.js.erb $("#like_button_<%=item.id%>").html("<%= escape_javascript(render partial: 'shared/like', locals:{item: item})%>");
destroy.js.erb $("#like_button_<%=item.id%>").html("<%= escape_javascript(render partial: 'shared/like', locals:{item: item})%>");
application.js //= require jquery3 //= require popper //= require bootstrap-sprockets //= require rails-ujs //= require_tree .
試したこと
status error 500をしらべてみると、サーバーエラーとわかったのですが、その後の解決手段が分からずにいます。
プレビューのエラーメッセージに「Did you mean? @item」と記載されていたので、create.js.erbのitemを@itemに変更して再実行しましたが、エラー解決できませんでした。
どなたかご教授いただければと思います。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/15 02:09
2021/03/15 03:04
2021/03/15 06:56