前提・実現したいこと
現在railsでアプリを作っていて、そこで非同期通信のいいね機能を実装したいです。
発生している問題・エラーメッセージ
Completed 500 Internal Server Error in 24ms (ActiveRecord: 2.6ms) ActionView::Template::Error (undefined method `id' for nil:NilClass): 1: $('#favorites_buttons_<%= @post.id %>').html("<%= j(render partial: 'favorites/favorite_button', locals: {post: @post}) %>");
該当のソースコード
posts/index <div class="row row-cols-md-3"> <% @posts.each do |post| %> <div class="col-md-3"> <div class="card"> <%= attachment_image_tag post, :post_image, class: "card-img-top"%> <div class="card-body"> <h4 class="card-title"><%=post.title%></h4> <h6 class="card-subtitle text-primary"><%=post.subject%></h6> <h6 class="card-subtitle text-muted"><%=post.teacher_name%></h6> <p class="card-text"><%=post.content%></p> <div class="text-center"> <% if current_user == post.user %> <%= link_to "削除", post, method: :delete, data: { confirm: "You sure?" }, class: 'btn btn-danger btn-sm' %> <%= link_to "編集", edit_post_path(post), class: "btn btn-success btn-sm"%> <%end%> <div id="favorites_buttons_<%= post.id %>"> <%= render partial: 'favorites/favorite_button', locals: { post: post} %> </div> </div> </div> </div> </div> <% end %> </div> <%=paginate @posts %>
favorites/controller class FavoritesController < ApplicationController before_action :authenticate_user! def create @favorite = current_user.favorites.create(post_id: params[:post_id]) end def destroy @post = Post.find(params[:post_id]) @favorite = current_user.favorites.find_by(post_id: @post.id) @favorite.destroy end end
_favorites_button <% if current_user.already_favorited?(post) %> <%= link_to post_favorites_path(post.id), method: :delete, remote: true do %> <i class="fas fa-heart"></i> <%end%> <%else%> <%= link_to post_favorites_path(post.id),method: :post, remote: true do %> <i class ="fas fa-heart"></i> <%end%> <%end%> <%=post.favorites.count%>
create.js.erb $('#favorites_buttons_<%= @post.id %>').html("<%= j(render partial: 'favorites/favorite_button', locals: {post: @post}) %>");
destroy.js.erb $('#favorites_buttons_<%= @post.id %>').html("<%= j(render partial: 'favorites/favorite_button', locals: {post: @post}) %>");
何か足りないソースコードなどがあれば是非お願いします!!
回答2件
あなたの回答
tips
プレビュー