前提・実現したいこと
今Railsで開発しているアプリで、ユーザー同士のフォロー機能を実装しています。
Twitterと同じような感じで、ユーザーのフォロワーを一覧で見られるようにし、
そのページに表示されているそれぞれのユーザーをフォローするボタンも付けています。
今実現したいことは、「フォローする」というボタンをクリックするとそのユーザーをフォローでき、
「フォロー中」と非同期で表示が変わるようにすることです。
しかし、なかなか実装できず行き詰まっているので、解決法を教えていただけますと助かります。
発生している問題・エラーメッセージ
非同期でフォローするボタンを押しても非同期で表示が変わりません。
しかしデータは正しく保存されており、リロードするとボタンの文字も正しく表示されます。
該当のソースコード
▼views/relationships/followers.html.haml(フォロワー一覧ページ)
haml
1.Follow_list 2 - if @followers.empty? 3 .Empty 4 = image_tag "foot.jpg", width: "120px" 5 %br 6 = "フォロワーはいません" 7 - else 8 = render partial: 'follower', collection: @followers
▼views/relationships/_follower.html.haml(各フォロワーのプロフィール)
haml
1- @user = follower 2 3.User_box 4 .User_box__Text 5 = link_to @user.name, user_path(@user), class: "Follow_name" 6 .Follow_profile 7 = simple_format(@user.profile) 8 - if user_signed_in? && @user != current_user 9 %div{class: "Follow-#{@user.id}"} 10 = render "relationships/follow", user: @user
▼views/relationships/_follow.html.haml(フォローボタン)
haml
1- if current_user.following?(user) 2 = link_to relationship_path(user.id), method: :delete, remote: true do 3 .White_btn.Following 4 .White_btn__Content 5 = icon('fas', 'user-check') 6 = 'フォロー中' 7- else 8 = link_to relationships_path(id: user.id), method: :post, remote: true do 9 .White_btn 10 .White_btn__Content 11 = icon('fas', 'user-plus') 12 = 'フォロー' 13
▼views/relationships/create.js.haml
js
1$('Follow-#{@user.id}').html("#{j(render "follow", user: @user)}");
▼views/relationships/destroy.js.haml
js
1$('Follow-#{@user.id}').html("#{j(render "follow", user: @user)}");
▼relationships_controller.rb
ruby
1class RelationshipsController < ApplicationController 2 before_action :set_user 3 4 def followers 5 @followers = @user.followers 6 end 7 8 def create 9 current_user.follow(@user) 10 @user.create_notification_follow!(current_user, @user) 11 respond_to do |format| 12 format.html {redirect_back(fallback_location: root_url)} 13 format.js 14 end 15 end 16 17 def destroy 18 current_user.unfollow(@user) 19 respond_to do |format| 20 format.html {redirect_back(fallback_location: root_url)} 21 format.js 22 end 23 end 24 25 private 26 def set_user 27 @user = User.find(params[:id]) 28 end 29end
試したこと
また、ターミナルやコンソールを確認したところ、エラーメッセージは見つかりませんでした。
ターミナルに表示されているログは以下の画像の通りです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/22 07:59
2020/09/22 08:40
2020/09/22 08:41