質問編集履歴
4
投稿一覧のコントローラと、Userモデルのfeedメソッド定義部分を載せました。
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
コードを修正しました。
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コントローラを載せさせていただきました!
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
無関係なコードを削除
test
CHANGED
File without changes
|
test
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
|
16
16
|
|
17
|
-
いいねボタンを押した時にいいね解除ボタンを表示させるため、パーシャル(_like
|
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
|
95
|
+
$("#post-#{@post.id}-likes").html("#{j(render('likes/like', post: @post))}");
|
96
96
|
|
97
97
|
|
98
98
|
|