質問編集履歴
4
投稿一覧のコントローラと、Userモデルのfeedメソッド定義部分を載せました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -49,7 +49,7 @@
|
|
49
49
|
|
50
50
|
```
|
51
51
|
```ここに言語を入力
|
52
|
-
**likes_controller.rb**
|
52
|
+
**likes_controller.rb**
|
53
53
|
|
54
54
|
class LikesController < ApplicationController
|
55
55
|
before_action :authenticate_user!
|
@@ -73,6 +73,32 @@
|
|
73
73
|
end
|
74
74
|
|
75
75
|
```
|
76
|
+
|
77
|
+
```ここに言語を入力
|
78
|
+
** posts_controller.rb ** #追加しました‼︎ 6/29
|
79
|
+
class PostsController < ApplicationController
|
80
|
+
|
81
|
+
def index
|
82
|
+
@posts = current_user.feed.eager_load(:user, :likes).page(params[:page]) #feedメソッドはUserモデルに定義
|
83
|
+
@post = Post.new
|
84
|
+
@like = Like.new
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
** user.rb ** #追加しました‼︎ 6/29
|
90
|
+
class User < ApplicationRecord
|
91
|
+
|
92
|
+
def feed
|
93
|
+
following_ids = "SELECT following_id FROM relationships
|
94
|
+
WHERE follower_id = :user_id"
|
95
|
+
Post.where("posts.user_id IN (#{following_ids})
|
96
|
+
OR posts.user_id = :user_id", user_id: id)
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
```
|
101
|
+
|
76
102
|
### 考えている解決策
|
77
103
|
通常の投稿一覧ページへのアクセスではrenderを使用しない方法を考えているのですが、いいね機能の非同期処理を実装するにあたって_likeパーシャル作成は避けられないため、**コードが重複してしまう**ので、悩んでいます。
|
78
104
|
|
@@ -82,6 +108,7 @@
|
|
82
108
|
|
83
109
|
|
84
110
|
|
111
|
+
|
85
112
|
### 補足情報(バージョンなど)
|
86
113
|
rails', '~> 5.2.1'
|
87
114
|
ruby '2.6.6'
|
3
コードを修正しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -55,6 +55,7 @@
|
|
55
55
|
before_action :authenticate_user!
|
56
56
|
|
57
57
|
def create
|
58
|
+
@post = Post.find(params[:post_id])
|
58
59
|
@like = current_user.likes.build(post_id: @post.id)
|
59
60
|
@like.save
|
60
61
|
respond_to do |format|
|
@@ -63,6 +64,7 @@
|
|
63
64
|
end
|
64
65
|
|
65
66
|
def destroy
|
67
|
+
@post = Post.find(params[:post_id])
|
66
68
|
Like.find_by(post_id: @post.id, user_id: current_user.id).destroy
|
67
69
|
respond_to do |format|
|
68
70
|
format.js
|
2
likesコントローラを載せさせていただきました!
title
CHANGED
File without changes
|
body
CHANGED
@@ -47,10 +47,30 @@
|
|
47
47
|
|
48
48
|
$("#post-#{@post.id}-likes").html("#{j(render('likes/like', post: @post))}");
|
49
49
|
|
50
|
+
```
|
51
|
+
```ここに言語を入力
|
52
|
+
**likes_controller.rb** #追加しました!
|
50
53
|
|
54
|
+
class LikesController < ApplicationController
|
55
|
+
before_action :authenticate_user!
|
51
56
|
|
57
|
+
def create
|
58
|
+
@like = current_user.likes.build(post_id: @post.id)
|
59
|
+
@like.save
|
60
|
+
respond_to do |format|
|
61
|
+
format.js
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def destroy
|
66
|
+
Like.find_by(post_id: @post.id, user_id: current_user.id).destroy
|
67
|
+
respond_to do |format|
|
68
|
+
format.js
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
52
73
|
```
|
53
|
-
|
54
74
|
### 考えている解決策
|
55
75
|
通常の投稿一覧ページへのアクセスではrenderを使用しない方法を考えているのですが、いいね機能の非同期処理を実装するにあたって_likeパーシャル作成は避けられないため、**コードが重複してしまう**ので、悩んでいます。
|
56
76
|
|
1
無関係なコードを削除
title
CHANGED
File without changes
|
body
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
投稿に対するいいね機能を非同期(Ajax)で実装しています。
|
8
8
|
|
9
|
-
いいねボタンを押した時にいいね解除ボタンを表示させるため、パーシャル(
|
9
|
+
いいねボタンを押した時にいいね解除ボタンを表示させるため、パーシャル(_like.html.haml)を作成しています。
|
10
10
|
|
11
11
|
いいねボタンを押したときにcreate.js.hamlにて、id: "post-#{post.id}-likes"のhtmlに_like.html.hamlをレンダリングする仕様です。
|
12
12
|
|
@@ -45,7 +45,7 @@
|
|
45
45
|
```ここに言語を入力
|
46
46
|
**create.js.haml**
|
47
47
|
|
48
|
-
$("#post-#{@post.id}-likes").html("#{j(render('likes/like', post: @post
|
48
|
+
$("#post-#{@post.id}-likes").html("#{j(render('likes/like', post: @post))}");
|
49
49
|
|
50
50
|
|
51
51
|
|