回答編集履歴

1

追加質問への回答

2016/10/25 04:12

投稿

hana-da
hana-da

スコア1728

test CHANGED
@@ -61,3 +61,105 @@
61
61
 
62
62
 
63
63
  js.erbは **$('#sympathizes_ajax')** となっていて何番目という指定もなく **#sympathizes_ajax** は3つある。という状態なので jQuery さんは困ってしまって、何も仕事しないのも悪いし。。と。。。くるしまぎれに一番最初を書き換えてるんじゃないかなぁと思います。
64
+
65
+
66
+
67
+ ----
68
+
69
+
70
+
71
+ コメント欄が違う方向で盛り上ってますねww
72
+
73
+
74
+
75
+ > では、hana-daさんが指摘してくださった問題を解決するためには
76
+
77
+ > idを指定した配列では不可能ということでしょうか?
78
+
79
+ >
80
+
81
+ > 何か対策を取りたいです。
82
+
83
+ > ・idにランダムな文字列を返す変数を代入する
84
+
85
+ > 以外に思いつかないのですが、おそらくidの値を変えたとしても問題は解決されないですよね。。。
86
+
87
+
88
+
89
+ (なんか色々、用語の使い方がおかしいような気もしますが。。。そこはスルーして。。。)
90
+
91
+
92
+
93
+ **id属性**の値をちゃんと一意なものにしてあげて、それをjavascriptで操作対象にしてあげればいいと思います。
94
+
95
+
96
+
97
+ ちょっと時間がないので検証してないコードを書いちゃいますが
98
+
99
+
100
+
101
+ まず **micropost.html.erb** で
102
+
103
+
104
+
105
+ ```erb
106
+
107
+ <% if shop_signed_in? %>
108
+
109
+ <div id="sympathizes_ajax_<%= micropost.id %>">
110
+
111
+ <%= render 'sympathizes/sympathize_links', micropost: micropost %>
112
+
113
+ </div>
114
+
115
+ <% end %>
116
+
117
+ ```
118
+
119
+
120
+
121
+ **id属性**の値に `micropost.id` をつけてあげる事で一意にする。
122
+
123
+
124
+
125
+ 次 **sympathizes/_sympathize_links.html.erb**
126
+
127
+
128
+
129
+ ```erb
130
+
131
+ <% if micropost.sympathized_by? current_shop %>
132
+
133
+ <%= link_to 'いいね!を取り消す', micropost_sympathizes_path(micropost.id), method: :delete, remote: true %>
134
+
135
+ <% else %>
136
+
137
+ <%= link_to 'いいね!', micropost_sympathizes_path(micropost.id), method: :post, remote: true %>
138
+
139
+ <% end %>
140
+
141
+ ```
142
+
143
+
144
+
145
+ ここでは、ちゃんと `micropost.id` を送信しているので問題なし
146
+
147
+
148
+
149
+ 次 **sympathizes/xxx.js.erb***
150
+
151
+
152
+
153
+ ```javascript
154
+
155
+ $('#sympathizes_ajax_<%= @micropost.id %>').html.........
156
+
157
+ ```
158
+
159
+
160
+
161
+ 操作対象を **micropost.html.erb** の変更に合せてあげる。
162
+
163
+
164
+
165
+ で、どうですかね?