teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

不要なpartialへの引数 likesを削除

2018/11/30 02:57

投稿

h_daido
h_daido

スコア824

answer CHANGED
@@ -37,7 +37,7 @@
37
37
  </span>
38
38
  <!-- 変更ここから -->
39
39
  <span id="like-of-<%= micropost.id %>">
40
- <%= render partial: 'likes/like', locals: { micropost: micropost, likes: @likes } %>
40
+ <%= render partial: 'likes/like', locals: { micropost: micropost } %>
41
41
  </span>
42
42
  <!-- 変更ここまで -->
43
43
  </li>

1

回答追記

2018/11/30 02:57

投稿

h_daido
h_daido

スコア824

answer CHANGED
@@ -14,4 +14,68 @@
14
14
  といったところです。
15
15
 
16
16
  micropostsを表示している一覧ページがありますよね?(そしてその中にいいねボタンがあると思うのですが)
17
- もしよければ、そこのerbテンプレートを貼ってみてください。修正方針が伝えられるかも。
17
+ もしよければ、そこのerbテンプレートを貼ってみてください。修正方針が伝えられるかも。
18
+
19
+
20
+ ## <以下追記>
21
+ _micropost.html.erbを以下のようにしてみてください。
22
+ likeパーシャルをなんでも良いのでタグで囲ってそこにIDを付与します
23
+ ```html
24
+ <li id="<%= micropost.id %>">
25
+ <%= link_to gravatar_for(micropost.user, size: 50), micropost.user %>
26
+ <span class="user"><%= link_to micropost.user.name, micropost.user %></span>
27
+ <span class="content"><%= micropost.content %></span><br />
28
+ <span class="rate rate-<%= micropost.rate %>"></span><br />
29
+ <span class="type"><%= micropost.type %></span><br />
30
+ <span class="case"><%= micropost.case %></span><br />
31
+ <span class="timestamp">
32
+ Posted <%= time_ago_in_words(micropost.created_at) %> ago.
33
+ <% if current_user?(micropost.user) %>
34
+ <%= link_to "delete", micropost, method: :delete,
35
+ data: { confirm: "You sure?" } %>
36
+ <% end %>
37
+ </span>
38
+ <!-- 変更ここから -->
39
+ <span id="like-of-<%= micropost.id %>">
40
+ <%= render partial: 'likes/like', locals: { micropost: micropost, likes: @likes } %>
41
+ </span>
42
+ <!-- 変更ここまで -->
43
+ </li>
44
+ ```
45
+
46
+ 次に、create.js.erb, destroy.js.erbを変更します
47
+ ・上記のID変更に対応
48
+ ・partialに渡す変数を修正
49
+ どちらも同じで通ると思います。
50
+
51
+ ```javascropt
52
+ $("#like-of-<%= @micropost.id %>").html("<%= j(render partial: 'like', locals: { micropost: @micropost}) %>")
53
+ ```
54
+
55
+ 最後に作成したerbに合わせてコントローラーを修正します
56
+ ```ruby
57
+ class LikesController < ApplicationController
58
+ def create
59
+ # micropostを取得します。(before_actionをしっていたら共通化しましょう)
60
+ @micropost = Micropost.find(params[:micropost_id])
61
+
62
+ @like = Like.create(user_id: current_user.id, micropost_id: params[:micropost_id])
63
+
64
+ # 以下は多分必要ないので削除
65
+ # @likes = Like.where(micropost_id: params[:micropost_id])
66
+ # @microposts = Micropost.all
67
+ end
68
+
69
+ def destroy
70
+ # micropostを取得します。(before_actionをしっていたら共通化しましょう)
71
+ @micropost = Micropost.find(params[:micropost_id])
72
+
73
+ like = Like.find_by(user_id: current_user.id, micropost_id: params[:micropost_id])
74
+ like.destroy
75
+
76
+ # 以下は多分必要ないので削除
77
+ # @likes = Like.where(micropost_id: params[:micropost_id])
78
+ # @microposts = Micropost.all
79
+ end
80
+ end
81
+ ```