現在SNSアプリをrails7を用いて作成しており、turboによる非同期のいいねシステムを作ろうと思っていた矢先以下のようなエラーが発生してしまいました泣
以下のサイトを参考にturboを用いてハートボタン(コード1の13行目)を押したところ図3のようなビューに移行しました。
ハートボタンの色といいね数を非同期で変更したいのですがどうすればよいでしょうか?
ご教授お願いします
参考サイト
https://blog.aiandrox.com/posts/tech/2021/09/10/
https://zenn.dev/shita1112/books/cat-hotwire-turbo/viewer/turbo-streams-fetch
コード1
erb/app/viws/likes/_likes
1<% if @posted %> 2 <% post = @posted %> 3<% end %> 4<%# turbo_stream.update :like_buttons do %> 5 <turbo_stream id="like_buttons"> 6 <% if Liker.find_by(content: session[:user_id],content2: post.id) %> 7 <%= link_to "/likes/#{post.id}/destroy" do %> 8 <span class="fa fa-heart liked-btn"></span> 9 <% end%> 10 <% else %> 11 <%# link_to "/likes/#{post.id}/create", remote: true do %> 12 <%# 下記リンクをクリックしたとき、`like_buttons ` という名前の Turbo Frame を更新する %> 13 <%= link_to "/likes/#{post.id}/create" do %> 14 <span class="fa fa-heart unliked-btn"></span> 15 <% end %> 16 <% end %> 17 <div> 18 <%= Liker.where(content2: post.id).count %> 19 </div> 20 </turbo-frame> 21<%# end %>
コード2
ruby/app/controllers/likescontroller
1class LikesController < ApplicationController 2 before_action :authenticate_user 3 def create 4 @posted = Posted.find_by(id: params[:post_id]) 5 @posts = Posted.all.order(created_at: :desc) 6 if !Liker.find_by(content: session[:user_id], content2: params[:post_id]) 7 @like = Liker.new( 8 content: session[:user_id], 9 content2: params[:post_id] 10 ) 11 @like.save 12 end 13 render turbo_stream: turbo_stream.update( 14 'like-buttons', 15 partial: 'likes/likes', 16 locals: { post: @posted} 17 ) 18 #format.html { render :_likes } 19 #render :_likes 20 end 21 22 def destroy 23 @like = Liker.find_by( 24 content: session[:user_id], 25 content2: params[:post_id] 26 ) 27 @like.destroy 28 redirect_to("/") 29 end 30 31end
コード3
erb/app/views/home/top
1 2<% @posts.each do |post| %> 3<div class="posted-detail-overlay"></div> 4<div class="posted-detail"> 5 <%= link_to("削除する", "/#{post.id}/destroy") %> 6</div> 7<div> 8 <div class="posting-container" id="favorite_<%= post.id%>"> 9 <a class="three-dot-leader">...</a> 10 <%= link_to post.user.content3, "/users/#{post.user.id}" %> 11 <%= link_to post.content, "/posts/#{post.id}", class: 'posted-show' %> 12 <%= render "likes/likes", post: post %> 13 14 <div class="post-time"> 15 <%= post.created_at%> 16 </div> 17 </div> 18</div> 19<% end %> 20
あなたの回答
tips
プレビュー