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

質問編集履歴

2

ターミナルの情報を記述

2020/12/10 00:29

投稿

Pro01x19
Pro01x19

スコア17

title CHANGED
@@ -1,1 +1,1 @@
1
- いいね機能を非同期にしたい。 リロードをすれば読み込まれる。
1
+ 未解決 いいね機能を非同期にしたい。 リロードをすれば読み込まれる。
body CHANGED
@@ -7,7 +7,37 @@
7
7
  ・ターミナルにはステータス200、エラーメッセージなし
8
8
 
9
9
  と言った状態です
10
+ ### ターミナル
10
11
 
12
+ ```
13
+ Started POST "/posts/1/likes" for ::1 at 2020-12-10 09:27:06 +0900
14
+ Processing by LikesController#create as JS
15
+ Parameters: {"authenticity_token"=>"gLf2VbgAMI4UilZjwT13haZKK0LDa+wbfrBQ01UVsYyGDhEp7C/b4CKzqM3oFWv+ThkVcXMsN+FPFIUSlUwNbA==", "post_id"=>"1"}
16
+ Post Load (0.5ms) SELECT `posts`.* FROM `posts` WHERE `posts`.`id` = 1 LIMIT 1
17
+ ↳ app/controllers/likes_controller.rb:21:in `set_post'
18
+ User Load (0.7ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
19
+ ↳ app/controllers/likes_controller.rb:6:in `create'
20
+ (0.2ms) BEGIN
21
+ ↳ app/controllers/likes_controller.rb:6:in `create'
22
+ Post Load (0.4ms) SELECT `posts`.* FROM `posts` WHERE `posts`.`id` = 1 LIMIT 1
23
+ ↳ app/controllers/likes_controller.rb:6:in `create'
24
+ User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
25
+ ↳ app/controllers/likes_controller.rb:6:in `create'
26
+ Like Create (0.4ms) INSERT INTO `likes` (`user_id`, `post_id`, `created_at`, `updated_at`) VALUES (1, 1, '2020-12-10 00:27:06.440564', '2020-12-10 00:27:06.440564')
27
+ ↳ app/controllers/likes_controller.rb:6:in `create'
28
+ Post Update All (0.5ms) UPDATE `posts` SET `posts`.`likes_count` = COALESCE(`posts`.`likes_count`, 0) + 1 WHERE `posts`.`id` = 1
29
+ ↳ app/controllers/likes_controller.rb:6:in `create'
30
+ (1.3ms) COMMIT
31
+ ↳ app/controllers/likes_controller.rb:6:in `create'
32
+ Rendering likes/create.js.erb
33
+ Like Load (0.5ms) SELECT `likes`.* FROM `likes` WHERE `likes`.`post_id` = 1 AND `likes`.`user_id` = 1 LIMIT 1
34
+ ↳ app/models/post.rb:6:in `like_user'
35
+ Rendered likes/_like.html.erb (Duration: 5.1ms | Allocations: 1379)
36
+ Rendered likes/create.js.erb (Duration: 7.5ms | Allocations: 1731)
37
+ Completed 200 OK in 36ms (Views: 11.4ms | ActiveRecord: 5.0ms | Allocations: 10875)
38
+ ```
39
+
40
+
11
41
  ### 該当のソースコード
12
42
 
13
43
  ```Ruby

1

状況が変わりましたので内容を変更しました

2020/12/10 00:29

投稿

Pro01x19
Pro01x19

スコア17

title CHANGED
@@ -1,1 +1,1 @@
1
- いいね機能を非同期にしたい。 リロードをすれば読み込まれる。 ActionView::Template::Error
1
+ いいね機能を非同期にしたい。 リロードをすれば読み込まれる。
body CHANGED
@@ -1,33 +1,13 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
3
  現在SNSのようなアプリのいいね機能を実装中です。
4
- ボタンになっている部分をクリックするとデータベースにはしっかりと記録が残り、リロードをすれば読み込まれます。がターミナルには
4
+ ボタンになっている部分をクリックするとデータベースにはしっかりと記録が残り、リロードをすれば読み込まれます。
5
5
 
6
+ ・非同期になっていない
6
- ### 発生している問題・エラーメッセージ
7
+ ターミナルにはステータス200、エラーメッセージなし
7
8
 
8
- ```
9
- ActionView::Template::Error (undefined local variable or method `post' for #<#<Class:0x00007fec95f91580>:0x00007fec95f8bb08>
10
- Did you mean? @post):
11
- 1: <% if user_signed_in? %>
12
- 2: <% if post.like_user(current_user.id) %>
13
- 3: <%= button_to post_like_path(like, post_id: post.id), method: :delete, id: "but-like-button", remote: true do %>
14
- 4: <i class="fas fa-star"></i>
15
- 5: <span>
16
- ```
17
- のメッセージが残っていました。
18
- メッセージ通り@postに変更をすると
19
- 一覧ページを表示する段階
9
+ と言った状態
20
- ```
21
- ActionView::Template::Error (undefined method `like_user' for nil:NilClass):
22
- 1: <% if user_signed_in? %>
23
- 2: <% if @post.like_user(current_user.id) %>
24
- 3: <%= button_to post_like_path(like, post_id: post.id), method: :delete, id: "but-like-button", remote: true do %>
25
- 4: <i class="fas fa-star"></i>
26
- 5: <span>
27
10
 
28
- ```
29
- のメッセージがブラウザ上に表示されます。
30
-
31
11
  ### 該当のソースコード
32
12
 
33
13
  ```Ruby
@@ -59,23 +39,26 @@
59
39
  ```
60
40
  ```Ruby
61
41
  create.js.erb
62
- $("#like-button").html("<%= j(render partial: 'like', locals: { tweets: @tweets, likes: @likes, like: @like}) %>")
63
42
 
43
+ $("#like-button-#{@post.id}").html("<%= j(render partial: 'like', locals: { posts: @posts, likes: @likes, like: @like, post: @post}) %>")
44
+
64
45
  ```
65
46
  ```Ruby
66
47
  destroy.js.erb
67
- $("#but-like-button").html("<%= j(render partial: 'like', locals: { tweets: @tweets, likes: @likes, like: @like}) %>")
68
48
 
49
+ $("#like-button-#{@post.id}").html("<%= j(render partial: 'like', locals: { posts: @posts, likes: @likes, like: @like, post: @post}) %>")
50
+
51
+
69
52
  ```
70
53
  ```Ruby
71
54
  likes_contoroller
72
55
 
73
- before_action :set_post
56
+ before_action :set_post
74
57
 
75
58
  def create
76
59
  @like = Like.create(user_id: current_user.id, post_id: params[:post_id])
77
60
  @likes = Like.where(post_id: params[:post_id])
78
- @post.reload
61
+ @posts = Post.all
79
62
 
80
63
  end
81
64
 
@@ -83,8 +66,7 @@
83
66
  like = Like.find_by(user_id: current_user.id, post_id: params[:post_id])
84
67
  like.destroy
85
68
  @likes = Like.where(post_id: params[:post_id])
86
- @post.reload
69
+ @posts = Post.all
87
-
88
70
  end
89
71
 
90
72
  private
@@ -93,6 +75,7 @@
93
75
  end
94
76
 
95
77
  end
78
+
96
79
  ```
97
80
  ```Ruby
98
81
  like.rb
@@ -122,7 +105,7 @@
122
105
 
123
106
  ### 試したこと
124
107
 
125
- それぞれのアクションの一番手前にbinding.pryをかけようと試みたところ、コンソールにうつる前にターミナルにエラーメッセージが出てしまい、コンソールに触ることができませんでした。
126
108
 
109
+
127
110
  https://qiita.com/YuitoSato/items/94913d6a349a530b2ea2
128
111
  こちらの記事を参考に実装を進めています