質問編集履歴

4

投稿一覧のコントローラと、Userモデルのfeedメソッド定義部分を載せました。

2021/06/29 10:12

投稿

NaoyaAbe
NaoyaAbe

スコア3

test CHANGED
File without changes
test CHANGED
@@ -100,7 +100,7 @@
100
100
 
101
101
  ```ここに言語を入力
102
102
 
103
- **likes_controller.rb** #追加しました!
103
+ **likes_controller.rb**
104
104
 
105
105
 
106
106
 
@@ -148,6 +148,58 @@
148
148
 
149
149
  ```
150
150
 
151
+
152
+
153
+ ```ここに言語を入力
154
+
155
+ ** posts_controller.rb ** #追加しました‼︎ 6/29
156
+
157
+ class PostsController < ApplicationController
158
+
159
+
160
+
161
+ def index
162
+
163
+ @posts = current_user.feed.eager_load(:user, :likes).page(params[:page]) #feedメソッドはUserモデルに定義
164
+
165
+ @post = Post.new
166
+
167
+ @like = Like.new
168
+
169
+ end
170
+
171
+
172
+
173
+ end
174
+
175
+
176
+
177
+ ** user.rb ** #追加しました‼︎ 6/29
178
+
179
+ class User < ApplicationRecord
180
+
181
+
182
+
183
+ def feed
184
+
185
+ following_ids = "SELECT following_id FROM relationships
186
+
187
+ WHERE follower_id = :user_id"
188
+
189
+ Post.where("posts.user_id IN (#{following_ids})
190
+
191
+ OR posts.user_id = :user_id", user_id: id)
192
+
193
+ end
194
+
195
+
196
+
197
+ end
198
+
199
+ ```
200
+
201
+
202
+
151
203
  ### 考えている解決策
152
204
 
153
205
  通常の投稿一覧ページへのアクセスではrenderを使用しない方法を考えているのですが、いいね機能の非同期処理を実装するにあたって_likeパーシャル作成は避けられないため、**コードが重複してしまう**ので、悩んでいます。
@@ -166,6 +218,8 @@
166
218
 
167
219
 
168
220
 
221
+
222
+
169
223
  ### 補足情報(バージョンなど)
170
224
 
171
225
  rails', '~> 5.2.1'

3

コードを修正しました。

2021/06/29 10:12

投稿

NaoyaAbe
NaoyaAbe

スコア3

test CHANGED
File without changes
test CHANGED
@@ -112,6 +112,8 @@
112
112
 
113
113
  def create
114
114
 
115
+ @post = Post.find(params[:post_id])
116
+
115
117
  @like = current_user.likes.build(post_id: @post.id)
116
118
 
117
119
  @like.save
@@ -127,6 +129,8 @@
127
129
 
128
130
 
129
131
  def destroy
132
+
133
+ @post = Post.find(params[:post_id])
130
134
 
131
135
  Like.find_by(post_id: @post.id, user_id: current_user.id).destroy
132
136
 

2

likesコントローラを載せさせていただきました!

2021/06/16 13:29

投稿

NaoyaAbe
NaoyaAbe

スコア3

test CHANGED
File without changes
test CHANGED
@@ -96,13 +96,53 @@
96
96
 
97
97
 
98
98
 
99
+ ```
99
100
 
101
+ ```ここに言語を入力
102
+
103
+ **likes_controller.rb** #追加しました!
104
+
105
+
106
+
107
+ class LikesController < ApplicationController
108
+
109
+ before_action :authenticate_user!
110
+
111
+
112
+
113
+ def create
114
+
115
+ @like = current_user.likes.build(post_id: @post.id)
116
+
117
+ @like.save
118
+
119
+ respond_to do |format|
120
+
121
+ format.js
122
+
123
+ end
124
+
125
+ end
126
+
127
+
128
+
129
+ def destroy
130
+
131
+ Like.find_by(post_id: @post.id, user_id: current_user.id).destroy
132
+
133
+ respond_to do |format|
134
+
135
+ format.js
136
+
137
+ end
138
+
139
+ end
140
+
141
+ end
100
142
 
101
143
 
102
144
 
103
145
  ```
104
-
105
-
106
146
 
107
147
  ### 考えている解決策
108
148
 

1

無関係なコードを削除

2021/06/16 13:27

投稿

NaoyaAbe
NaoyaAbe

スコア3

test CHANGED
File without changes
test CHANGED
@@ -14,7 +14,7 @@
14
14
 
15
15
 
16
16
 
17
- いいねボタンを押した時にいいね解除ボタンを表示させるため、パーシャル(_likes.html.haml)を作成しています。
17
+ いいねボタンを押した時にいいね解除ボタンを表示させるため、パーシャル(_like.html.haml)を作成しています。
18
18
 
19
19
 
20
20
 
@@ -92,7 +92,7 @@
92
92
 
93
93
 
94
94
 
95
- $("#post-#{@post.id}-likes").html("#{j(render('likes/like', post: @post, likes_count: @post.likes.size))}");
95
+ $("#post-#{@post.id}-likes").html("#{j(render('likes/like', post: @post))}");
96
96
 
97
97
 
98
98