質問編集履歴

3

routes.rb追加

2021/04/13 01:32

投稿

danburudoa
danburudoa

スコア8

test CHANGED
File without changes
test CHANGED
@@ -152,6 +152,34 @@
152
152
 
153
153
  ```
154
154
 
155
+ ```
156
+
157
+ routes.rb
158
+
159
+
160
+
161
+ Rails.application.routes.draw do
162
+
163
+ devise_for :users
164
+
165
+ root to: "boards#index"
166
+
167
+ resources :users, only: [:show, :edit, :update, :destroy]
168
+
169
+ resources :boards do
170
+
171
+ resources :comments, only: :create do
172
+
173
+ resources :likes, only: [:create, :destroy]
174
+
175
+ end
176
+
177
+ end
178
+
179
+ end
180
+
181
+ ```
182
+
155
183
  ### 補足説明
156
184
 
157
185
  以前も全く同じ質問をしていて、このエラー文は以下のURLのベストアンサーが原因だと回答してもらいました。

2

エラー画像追加

2021/04/13 01:32

投稿

danburudoa
danburudoa

スコア8

test CHANGED
File without changes
test CHANGED
@@ -7,6 +7,8 @@
7
7
  ### エラー内容
8
8
 
9
9
  https://gyazo.com/3b5e90b9e8a21ee7d8116d0bf56fb70d
10
+
11
+ https://gyazo.com/94b3b69c4d0da4324e5866f410471938
10
12
 
11
13
  ### ソースコード
12
14
 
@@ -155,3 +157,7 @@
155
157
  以前も全く同じ質問をしていて、このエラー文は以下のURLのベストアンサーが原因だと回答してもらいました。
156
158
 
157
159
  https://teratail.com/questions/332695
160
+
161
+ いいね機能は、ログインユーザーが一回だけいいねを押すことができる設計にしています。
162
+
163
+ もし、よろしければ実装方法をご教授していただけると嬉しいです。

1

ソースコード、エラー文、補足説明の追加

2021/04/12 01:36

投稿

danburudoa
danburudoa

スコア8

test CHANGED
File without changes
test CHANGED
@@ -3,3 +3,155 @@
3
3
  Ruby初学者です。
4
4
 
5
5
  現在、オリジナルの掲示板アプリを作成中で、ユーザー管理機能、投稿機能、コメント機能を実装済みです。新しくコメント一つ一つに対していいね機能を実装しようと思いましたが、うまく実装できません。構成としては、投稿機能のshowアクションの中に、投稿とコメントが表示されていて、新たにそのコメント一つ一つにいいねがつくようにしたかったのですが、この実装は難しいのでしょうか?一日中実装方法を調べてもだめだったので、諦めようか迷っています。もし、可能であるならどのようなデータベース設計になるのでしょうか?
6
+
7
+ ### エラー内容
8
+
9
+ https://gyazo.com/3b5e90b9e8a21ee7d8116d0bf56fb70d
10
+
11
+ ### ソースコード
12
+
13
+ ```
14
+
15
+ like.rb
16
+
17
+
18
+
19
+ class Like < ApplicationRecord
20
+
21
+ belongs_to :user
22
+
23
+ belongs_to :board
24
+
25
+ belongs_to :comment
26
+
27
+
28
+
29
+ validates_uniqueness_of :comment_id, scope: :user_id
30
+
31
+ end
32
+
33
+ ```
34
+
35
+ ```
36
+
37
+ comment.rb
38
+
39
+
40
+
41
+ class Comment < ApplicationRecord
42
+
43
+ belongs_to :user
44
+
45
+ belongs_to :board
46
+
47
+ has_many :likes
48
+
49
+
50
+
51
+ validates :text, presence: true
52
+
53
+ end
54
+
55
+ ```
56
+
57
+ ```
58
+
59
+ likes_controller
60
+
61
+
62
+
63
+ class LikesController < ApplicationController
64
+
65
+ def create
66
+
67
+ @board = Board.find(params[:board_id])
68
+
69
+ @comment = Comment.find(params[:comment_id])
70
+
71
+ @like = Like.create(user_id: current_user.id, board_id: board.id, comment_id: comment.id)
72
+
73
+ redirect_to board_path(comment.board)
74
+
75
+ end
76
+
77
+
78
+
79
+ def destroy
80
+
81
+ @board = Board.find(params[:board_id])
82
+
83
+ @comment = Comment.find(params[:comment_id])
84
+
85
+    Like.find_by(user_id: current_user.id, board_id: board.id, comment_id: comment.id).destroy
86
+
87
+ redirect_to board_path(comment.post)
88
+
89
+ end
90
+
91
+ end
92
+
93
+ ```
94
+
95
+ ```
96
+
97
+ _like.html.erb
98
+
99
+
100
+
101
+ <%if user_signed_in? %>
102
+
103
+ <% if Like.find_by(user_id: current_user.id, board_id: @board.id, comment_id: @comment.id) %>
104
+
105
+ <%= link_to board_comment_like_path(@board, @comment, @comment.likes), {class: "like-link", method: :delete } do %>
106
+
107
+ <i class="fas fa-grin-squint-tears unlike-btn"></i>
108
+
109
+ <% end %>
110
+
111
+ <p class="count"><%= @comment.likes.count %></p>
112
+
113
+ <% else %>
114
+
115
+ <%= link_to board_comment_likes_path(@board, @comment_like), {class: "like-link", method: :post } do %>
116
+
117
+ <i class="far fa-grin-squint-tears like-btn"></i>
118
+
119
+ <% end %>
120
+
121
+ <p class="count"><%= @comment.likes.count %></p>
122
+
123
+ <% end %>
124
+
125
+ <% else %>
126
+
127
+ <i class="fas fa-grin-squint-tears unlike-btn"></i><p class="count"><%= @comment.likes.count %></p>
128
+
129
+ <% end %>
130
+
131
+ ```
132
+
133
+ ```
134
+
135
+ boards_controller
136
+
137
+
138
+
139
+ def show
140
+
141
+ @board = Board.find(params[:id])
142
+
143
+ @comment_like = Comment.find(params[:id])
144
+
145
+ @comment = Comment.new
146
+
147
+ @comments = @board.comments.includes(:user)
148
+
149
+ end
150
+
151
+ ```
152
+
153
+ ### 補足説明
154
+
155
+ 以前も全く同じ質問をしていて、このエラー文は以下のURLのベストアンサーが原因だと回答してもらいました。
156
+
157
+ https://teratail.com/questions/332695