質問編集履歴

3

誤字

2021/03/22 23:59

投稿

akayoshi
akayoshi

スコア0

test CHANGED
File without changes
test CHANGED
@@ -126,7 +126,7 @@
126
126
 
127
127
  has_many :likes, dependent: :destroy
128
128
 
129
- has_many :like_stories, through: :likes, source: :article
129
+ has_many :like_articles, through: :likes, source: :article
130
130
 
131
131
  end
132
132
 

2

脱字

2021/03/22 23:59

投稿

akayoshi
akayoshi

スコア0

test CHANGED
File without changes
test CHANGED
@@ -42,7 +42,7 @@
42
42
 
43
43
  ```
44
44
 
45
- いいね機能を配置し投稿の詳細画面にて、ハートが黒の状態でいいねボタンを押すとconsole上でこのように表示されて、ボタンに変化は起きません。
45
+ いいね機能を配置している投稿の詳細画面にて、ハートが黒の状態でいいねボタンを押すとconsole上でこのように表示されて、ボタンに変化は起きません。
46
46
 
47
47
 
48
48
 

1

誤字、脱字

2021/03/22 02:36

投稿

akayoshi
akayoshi

スコア0

test CHANGED
File without changes
test CHANGED
@@ -4,15 +4,21 @@
4
4
 
5
5
 
6
6
 
7
- いいねボタンを押すと、非同期にてハートの色が黒から赤に変化し
7
+ いいね❤️ボタンを押すと、非同期にてハートの色が黒から赤❤️に変化し
8
8
 
9
9
  いいねの数も変動するように設定したいです。
10
10
 
11
11
 
12
12
 
13
+ ※参考文献
14
+
15
+ [[Rails]いいね機能の非同期での実装!!!](https://qiita.com/hayabusa3703/items/2b916e652a1dc85bb6e3)
16
+
17
+
18
+
13
19
  ※イメージ動画
14
20
 
15
- https://gyazo.com/a84ecf33d907028182d0263e61826b66
21
+ [いいねを押した時](https://gyazo.com/a84ecf33d907028182d0263e61826b66)
16
22
 
17
23
 
18
24
 
@@ -20,7 +26,9 @@
20
26
 
21
27
  ### 発生している問題・エラーメッセージ
22
28
 
23
- ### show.html.erb Console上
29
+ ### show.html.erb
30
+
31
+ **Console**
24
32
 
25
33
  ```
26
34
 
@@ -56,10 +64,44 @@
56
64
 
57
65
 
58
66
 
67
+ [現状の動画](https://gyazo.com/760ebb42c6a5b99cff71460a015aa5ac)
68
+
69
+
70
+
59
71
 
60
72
 
61
73
  ### いいね機能に関するソースコード
62
74
 
75
+
76
+
77
+ **create_likes_rb**
78
+
79
+ ```
80
+
81
+ class CreateLikes < ActiveRecord::Migration[6.0]
82
+
83
+ def change
84
+
85
+ create_table :likes do |t|
86
+
87
+ t.references :user, foreign_key: true
88
+
89
+ t.references :article, foreign_key: true
90
+
91
+ t.timestamps
92
+
93
+ end
94
+
95
+ end
96
+
97
+ end
98
+
99
+ ```
100
+
101
+ ※いいねの数をカウントする"likes_count"カラムは、articlesテーブルに追加しています。
102
+
103
+
104
+
63
105
  ### 各モデル
64
106
 
65
107
  user.rb
@@ -164,20 +206,208 @@
164
206
 
165
207
 
166
208
 
209
+ ### コントローラー
210
+
211
+ **likes_controller.rb**
212
+
213
+ ```
214
+
215
+ class LikesController < ApplicationController
216
+
217
+ before_action :set_variables, only: [:create, :destroy]
218
+
219
+
220
+
221
+ def create
222
+
223
+ like = current_user.likes.new(article_id: @article.id)
224
+
225
+ like.save
226
+
227
+ end
228
+
229
+
230
+
231
+ def destroy
232
+
233
+ like = current_user.likes.find_by(article_id: @article.id)
234
+
235
+ like.destroy
236
+
237
+ end
238
+
239
+
240
+
241
+ private
242
+
243
+
244
+
245
+ def set_variables
246
+
247
+ @article = Article.find(params[:article_id])
248
+
249
+ @id_name = "#like-link-#{@article.id}"
250
+
251
+ end
252
+
253
+ end
254
+
255
+ ```
256
+
257
+
258
+
259
+ ### 部分テンプレート
260
+
261
+ **views/articles/show.html.erb**
262
+
263
+ ```
264
+
265
+ <%= render partial: 'articles/articles', locals: { article: @article } %>
266
+
267
+ ```
268
+
269
+ **views/articles/_articles.html.erb**
270
+
271
+ ```
272
+
273
+ <%= render 'likes/like', article: article %>
274
+
275
+ ```
276
+
277
+ **views/likes/_like.html.erb**
278
+
279
+ ```
280
+
281
+ <% if user_signed_in? %>
282
+
283
+ <div class="like-link" id="like-link-<%= article.id %>">
284
+
285
+ <% if current_user.likes.find_by(article_id: article.id) %>
286
+
287
+ <%= link_to article_like_path(article.id), method: :delete, remote: true do %>
288
+
289
+ <div class = "iine__button">❤️<%= article.likes.count %></div>
290
+
291
+ <% end %>
292
+
293
+ <% else %>
294
+
295
+ <%= link_to article_likes_path(article.id), method: :post, remote: true do %>
296
+
297
+ <div class = "iine__button">♡️<%= article.likes.count %></div>
298
+
299
+ <% end %>
300
+
301
+ <% end %>
302
+
303
+ </div>
304
+
305
+ <% end %>
306
+
307
+ ```
308
+
309
+
310
+
311
+ ### ajaxを使った非同期化
312
+
313
+ **views/likes/create.js.erb**
314
+
315
+ ```
316
+
317
+ $("<%= @id_name %>").html('<%= escape_javascript(render("likes/like", article: @article )) %>');
318
+
319
+ ```
320
+
321
+ **views/likes/destroy.js.erb**
322
+
323
+ ```
324
+
325
+ $("<%= @id_name %>").html('<%= escape_javascript(render("likes/like", article: @article )) %>');
326
+
327
+ ```
328
+
329
+
330
+
331
+ ### 各applicationファイル
332
+
333
+ **javascript/packs/application.js**
334
+
335
+ ```
336
+
337
+ require("@rails/ujs").start()
338
+
339
+ //= require jquery3 ##追記部分##
340
+
341
+ //= require rails-ujs ↓
342
+
343
+ //= require_tree . ↓
344
+
345
+ // require("turbolinks").start()
346
+
347
+ require("@rails/activestorage").start()
348
+
349
+ require("channels")
350
+
351
+ require('../preview')
352
+
353
+ ```
354
+
355
+ **views/layouts/application.html.erb**
356
+
357
+ ```
358
+
359
+ <!DOCTYPE html>
360
+
361
+ <html>
362
+
363
+ <head>
364
+
365
+ <title>GetReadySauna</title>
366
+
367
+ <%= csrf_meta_tags %>
368
+
369
+ <%= csp_meta_tag %>
370
+
371
+
372
+
373
+ <%= stylesheet_link_tag 'application', media: 'all'%>
374
+
375
+ <%= javascript_pack_tag 'application' %>
376
+
377
+ <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> ##追記部分##
378
+
379
+ </head>
380
+
381
+
382
+
383
+ <body>
384
+
385
+ <%= yield %>
386
+
387
+ </body>
388
+
389
+ </html>
390
+
391
+ ```
392
+
167
393
 
168
394
 
169
395
 
170
396
 
171
397
  ### 試したこと
172
398
 
173
-
399
+ jQueryをGemfileに導入し、bundle installをしたのち、application.jsにjQueryを使用するための必要事項と思われるものを記載しました。
400
+
401
+
402
+
174
-
403
+ しかし非同期通信が行われなかったので、application.html.erbに ##追記部分## を記述したところ
404
+
175
- ここ問題に対て試しことを記載してください
405
+ destroyアクションだけは非同期で動くようなりましたが、createアクションは変わらず非同期では動きません
176
-
177
-
178
-
406
+
407
+
408
+
409
+
410
+
179
- ### 補足情報(FW/ツールのバージョンなど)
411
+ どうすればcreateアクションも非同期にるのかわからず、路頭に迷っています。。。
180
-
181
-
182
-
412
+
183
- ここにり詳細な情報を記載ださい。
413
+ どうかお力添えのほど、しくお願いたします