質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

1568閲覧

【JavaScript・Rails】フォロー機能が非同期で実装できない

kumamin

総合スコア12

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2020/09/22 07:26

前提・実現したいこと

今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

試したこと

また、ターミナルやコンソールを確認したところ、エラーメッセージは見つかりませんでした。
ターミナルに表示されているログは以下の画像の通りです。
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

勘違いしていました。ソースはそのままで、下記のみ修正してみるとどうなりますか?

views/relationships/create.js.haml
views/relationships/destroy.js.haml

$('.Follow-#{@user.id}').html("#{j(render "follow", user: @user)}");
※どっとを入れてクラスを指定

また実行したときにブラウザの検証ツールでコンソールのエラーがないかも確認してみてください。

投稿2020/09/22 07:34

編集2020/09/22 08:30
no1knows

総合スコア3365

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kumamin

2020/09/22 07:59

ご回答ありがとうございます。 `format.html {redirect_back(fallback_location: root_url)}`を削除してみたのですが、状況は変わりませんでした。 また、送っていただいたサイトを参考に`redirect_back`も記述してみると、コンソールに以下のようなエラーが出てしまいました。 Uncaught ReferenceError: Turbolinks is not defined
kumamin

2020/09/22 08:40

ドットが抜けていたんですね!! おかげさまで解決しました。ありがとうございます!!
no1knows

2020/09/22 08:41

お手数をおかけしました。解決して良かったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問