teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

日本語が変な気がしたので、文言を修正しました。

2020/02/26 10:17

投稿

kyoruni
kyoruni

スコア93

answer CHANGED
@@ -31,7 +31,7 @@
31
31
 
32
32
  今回の場合であれば、フォローボタンの処理だけをindex.js.erbに分けて書くのではなく、「createアクションで動かす処理はcreate.js.erb」 「destroyアクションで動かす処理はdestroy.js.erb」に書いた方が分かりやすいのではないかと思います。
33
33
 
34
- **→ index.js.erb処理を、すでに作成している `create.js.erb`と`destroy.js.erb`に記載すると良いのではないでしょうか…?**
34
+ **→ index.js.erbに書いたような処理を、すでに作成している `create.js.erb`と`destroy.js.erb`に記載すると良いのではないでしょうか…?**
35
35
 
36
36
  **【 参考ページ 】** [Rails で JavaScript を使用する - Railsガイド](https://railsguides.jp/working_with_javascript_in_rails.html)
37
37
 

2

追加していただいたコードを拝見したので、内容を追記しました。

2020/02/26 10:16

投稿

kyoruni
kyoruni

スコア93

answer CHANGED
@@ -4,4 +4,35 @@
4
4
 
5
5
  `remote: true` を使うと、ページを更新せずリクエストだけ投げてくれるようになります。
6
6
 
7
- リクエストを送ってもHTMLの中身はそのままなので、フォローボタンの表示は変わりません。リロードせずにHTMLの中身を変更したい場合は、jQuery側で書き換えてあげる必要があります。
7
+ リクエストを送ってもHTMLの中身はそのままなので、フォローボタンの表示は変わりません。リロードせずにHTMLの中身を変更したい場合は、jQuery側で書き換えてあげる必要があります。
8
+
9
+ **- - - - - - ↓ 以下追記です ↓ - - - - - - -**
10
+
11
+ Ajaxのリクエストについてですが、コントローラーの下記部分に記載があります。
12
+
13
+ ```ruby
14
+ class RelationshipsController < ApplicationController
15
+ def create
16
+ @user = User.find(params[:relationship][:following_id])
17
+ @current_user.follow!(@user)
18
+ respond_to do |format|
19
+ format.html { redirect_to @user }
20
+ format.js # ← ★★★ この部分 ★★★
21
+ end
22
+ end
23
+ ```
24
+
25
+ Relationshipsのcreateアクションでは `app/views/relationships/create.js.erb` が、
26
+ Relationshipsのdestroyアクションでは `app/views/relationships/destroy.js.erb` が呼ばれます。
27
+
28
+ **→ index.js.erbにフォローボタンの処理を書いても、それを呼び出す記述がないので動きません。**
29
+
30
+ (参考サイトも拝見しましたが、そちらではコントローラーのcreateアクションとdestroyアクションの中でindex.js.erbを呼び出しているようです)
31
+
32
+ 今回の場合であれば、フォローボタンの処理だけをindex.js.erbに分けて書くのではなく、「createアクションで動かす処理はcreate.js.erb」 「destroyアクションで動かす処理はdestroy.js.erb」に書いた方が分かりやすいのではないかと思います。
33
+
34
+ **→ index.js.erbの処理を、すでに作成している `create.js.erb`と`destroy.js.erb`に記載すると良いのではないでしょうか…?**
35
+
36
+ **【 参考ページ 】** [Rails で JavaScript を使用する - Railsガイド](https://railsguides.jp/working_with_javascript_in_rails.html)
37
+
38
+ - 「4.1 シンプルな例」 の辺り

1

文章中、主語が抜けていたので修正しました。

2020/02/26 10:13

投稿

kyoruni
kyoruni

スコア93

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  コントローラーの中身を見ていないので推測でしかないのですが、フォローボタンorアンフォローボタンを押した時、「ユーザーをフォローする処理」と「jQueryでフォローしているユーザー数を書き換える処理」が走っているような気がします。
2
2
 
3
- 「フォローボタンを押した時の処理」に「アンフォローボタンを表示する」、「アンフォローボタンを押した時の処理」に「フォローボタンを表示する」コードを追加してあげれば、やりたかったことが実現できるのではないかなと思います。
3
+ 「フォローボタンを押した時の処理」に「jQuery側でアンフォローボタンを表示する」、「アンフォローボタンを押した時の処理」に「jQuery側でフォローボタンを表示する」コードを追加してあげれば、やりたかったことが実現できるのではないかなと思います。
4
4
 
5
5
  `remote: true` を使うと、ページを更新せずリクエストだけ投げてくれるようになります。
6
6