質問編集履歴
1
コードにタイプミスがあったため修正しています。
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
Javascriptにカスタムデータを取得しようとするとnulになる。
|
body
CHANGED
@@ -1,16 +1,22 @@
|
|
1
|
-
それぞれの投稿に紐付いたコメント投稿をJavascriptで非同期で実装をしていますが
|
1
|
+
それぞれの投稿(preschool)に紐付いたコメント投稿をJavascriptで非同期で実装をしていますが
|
2
|
-
|
2
|
+
カスタムデータがnulになってしまいます。
|
3
|
-
|
4
3
|
エラー内容
|
5
4
|
-------
|
5
|
+
preschoolを親要素、commentを子要素のネストにしており
|
6
|
+
```
|
7
|
+
data-id="<%= @preschool.id %>"
|
8
|
+
```
|
9
|
+
上記をビューに入れ込んでカスタムデータを取得しようとしている。
|
10
|
+
|
11
|
+
|
6
12
|
```Javascript
|
7
13
|
function comment(){
|
8
14
|
const submit = document.getElementById("submit");
|
9
15
|
submit.addEventListener("click", (e) => {
|
16
|
+
const preschoolId = submit.getAttribute("data-id");
|
10
17
|
const formData = new FormData(document.getElementById("comment-form"));
|
11
18
|
const XHR = new XMLHttpRequest();
|
12
|
-
debugger
|
13
|
-
XHR.open("POST",`/preschools/${
|
19
|
+
XHR.open("POST",`/preschools/${preschoolId}/comments`, true);
|
14
20
|
XHR.responseType = "json";
|
15
21
|
XHR.send(formData);
|
16
22
|
XHR.onload = () => {
|
@@ -18,7 +24,7 @@
|
|
18
24
|
alert(`Error ${XHR.status}: ${XHR.statusText}`);
|
19
25
|
return null;
|
20
26
|
}
|
21
|
-
const item = XHR.response.
|
27
|
+
const item = XHR.response.comment;
|
22
28
|
const list = document.getElementById("comment-list");
|
23
29
|
const formText = document.getElementById("comment-content");
|
24
30
|
const HTML = `
|
@@ -39,41 +45,89 @@
|
|
39
45
|
と記載をしたときに
|
40
46
|
|
41
47
|
```
|
42
|
-
|
48
|
+
preschoolId = null
|
43
|
-
at eval (eval at <anonymous> (comment.js:6), <anonymous>:one:32)
|
44
|
-
at HTMLInputElement.<anonymous> (comment.js:6)
|
45
49
|
```
|
50
|
+
となることによりパスの指定ができずエラーになってしまいます。
|
46
51
|
|
47
|
-
とエラーが出ます。
|
48
52
|
|
53
|
+
```
|
54
|
+
<div class="detail-info" data-id="<%= @preschool.id %>" >
|
55
|
+
<div class="detail-name">園名
|
56
|
+
<%= @preschool.name %></div>
|
57
|
+
<div class="detail-name">
|
58
|
+
<% @preschool.images.each do |image| %>
|
59
|
+
<%= image_tag image, class: 'images' %>
|
60
|
+
<% end %>
|
61
|
+
</div>
|
62
|
+
<div class="detail-name">郵便番号
|
63
|
+
<%= @preschool.post_number %>
|
64
|
+
</div>
|
65
|
+
<div class="detail-name">エリア<%= @preschool.area.name%></div>
|
66
|
+
<div class="detail-name">詳細住所<%= @preschool.street_number %><%= @preschool.building %></div>
|
67
|
+
<div class="detail-name">電話番号
|
68
|
+
<%= @preschool.phone_number%>
|
69
|
+
</div>
|
70
|
+
<div class="detail-name">最寄り駅
|
71
|
+
<%= @preschool.station %></div>
|
72
|
+
<div class="detail-name">定員数
|
73
|
+
<%= @preschool.capacity %></div>
|
74
|
+
<div class="detail-name">運営種別
|
75
|
+
<%= @preschool.category.name%></div>
|
76
|
+
<div class="detail-name">開園時間
|
77
|
+
<%= l @preschool.open_hour, format: :short%>〜<%= l @preschool.close_hour ,format: :short%></div>
|
78
|
+
<div class="detail-name">園の特徴
|
79
|
+
<%= @preschool.concept%></div>
|
80
|
+
</div>
|
81
|
+
<% if admin_signed_in? && current_admin.id == @preschool.admin_id %>
|
82
|
+
<div class="preschool__manage">
|
83
|
+
<%= link_to "編集する", edit_preschool_path(@preschool.id), class: :preschool__btn %>
|
84
|
+
<%= link_to "削除する", preschool_path(@preschool.id), class: :preschool__btn,method: :delete %>
|
85
|
+
</div>
|
86
|
+
<% end%>
|
49
87
|
|
88
|
+
<div class="preschool__comments">
|
89
|
+
<% if user_signed_in? %>
|
90
|
+
<%= form_with( model: [@preschool, @comment], id: "comment-form",local: true) do |f|%>
|
91
|
+
<div class="field">
|
92
|
+
<%= f.label :text, "ママ友の口コミ",id:"comment-content" %><br />
|
93
|
+
<%= f.text_field :text %>
|
94
|
+
</div>
|
95
|
+
<div class="actions" >
|
96
|
+
<%= f.submit "送信する", class: :comment_form__btn ,id:"submit" %>
|
97
|
+
</div>
|
98
|
+
<% end %>
|
99
|
+
<% end%>
|
50
100
|
|
101
|
+
<div class="comments_lists" , id = "comment-list" >
|
102
|
+
<% @preschool.comments.each do |comment|%>
|
51
|
-
|
103
|
+
<li class="comments_list">
|
52
|
-
|
104
|
+
<%= comment.text%>
|
105
|
+
<%= link_to "#{comment.user.nickname}さん", "/users/#{comment.user_id}",class: :comment_user %>
|
53
|
-
|
106
|
+
</li>
|
107
|
+
<% if user_signed_in? && current_user.id == comment.user_id %>
|
108
|
+
<div class="comments_manage">
|
54
|
-
|
109
|
+
<%= link_to "編集", edit_preschool_comment_path(comment.id), class: :comment_edit__btn %>
|
55
|
-
```
|
56
|
-
のURLが参照できないというエラーだと思われるので
|
57
|
-
gonをインストールし、コントローラーも修正しました。
|
58
|
-
```controller
|
59
|
-
def show
|
60
|
-
@preschool =Preschool.find(params[:id])
|
61
|
-
gon.preschool_id = @preschool.id
|
62
|
-
@comment = Comment.new
|
63
|
-
|
110
|
+
<%= link_to "削除", preschool_comment_path(@preschool,comment), class: :comment_destroy_btn,method: :delete %>
|
111
|
+
</div>
|
64
|
-
|
112
|
+
<% end%>
|
65
|
-
|
113
|
+
<% end %>
|
114
|
+
</div>
|
66
115
|
|
116
|
+
|
67
117
|
```
|
68
|
-
XHR.open("POST",`/preschools/${gon.preschool_id}/comments`, true);
|
69
|
-
```
|
70
118
|
|
71
|
-
エラー内容は変わらずでした。
|
72
119
|
|
73
120
|
|
121
|
+
試してみたこと
|
122
|
+
----------
|
123
|
+
|
124
|
+
そもそもビューでIDを取得できるか再確認しました。
|
74
125
|
```
|
75
|
-
|
126
|
+
<%= @preschool.id %>
|
127
|
+
|
76
128
|
```
|
77
|
-
をJavascriptで参照できるようにしたいのですが
|
78
|
-
どのように記述をしたらいいのでしょうか。。
|
79
|
-
|
129
|
+
をshow.html.erbに書き込むと指定のIDのが取得されました。
|
130
|
+
|
131
|
+
ビューで取得できるか再確認しました。
|
132
|
+
<%= @preschool.id %>
|
133
|
+
をshow.html.erbに書き込むと指定のIDのが取得されました。
|