やりたいこと:情報ウィンドウ(mapAPIのinfoWindow)のcontent内へ記載したリンクを押すと、プロフィールページへ遷移するようにしたいです。
解けない状況が続いており相談させてください。
【アプリイメージ】
トップページ上に配置したマップに、参加者の位置を反映させたマーカーを立てます。
各マーカー毎の情報ウィンドウを開くと、リンクが貼ってあり、クリックすると参加者個別のプロフィールに飛べるようにしたいです。
【出来ていること、出来ていないこと】
出来ていること :①②③
出来ていないこと:④
①マップ作成 → ②マーカー立て(位置反映) → ③情報ウィンドウの発生(リンク先記載) → ④個別プロフィールへ遷移
※緯度経度をデータベースに保存し、gonを使用してコントローラから、JSファイルへ配列データを渡しています。
発生している問題点と仮説
情報ウィンドウ内に記載のリンクをクリックするとエラーが出ます。
そこでカーソルを合わせた場合の遷移先(画面左下)を見ると、id番号が指定できていないようです。
参考:https://gyazo.com/bbf2996d0f8f54777988b3e337781453
abouts#showに遷移したく、idを指定しました。
遷移出来ない現状では下記となっています。
/abouts/gon.aboutIdArray[i]
paramsを確認すると以下となります。
{"controller"=>"abouts", "action"=>"show", "id"=>"gon", "format"=>"aboutIdArray[i]"}
本来は以下のようにしたいです。
/abouts/42
※「42」等showページのid番号(/abouts/:id)
以上から、ソースコード上の
下記の行による数字の指定ができていないのではと考えています。
'<p>ABOUT: <a id="url" href="/abouts/gon.aboutIdArray[i]" target="_blank">id反映されていない</a></p>' +
関連ソースコード
// JSファイルです。 #map.js var mapCenter = { lat: 35.659482, lng: 139.700553 }; var mapMarker = []; var mapInfoWindow = []; var infoWindowContent = []; function initMap() { var mapArea = document.getElementById("map"); var mapOption = { center: mapCenter, zoom: 6, }; // ----- MAP ------------------------------------------ var mapIs = new google.maps.Map(mapArea, mapOption); // ----- Location ------------------------------------- for (var i = 0; i < gon.aboutIdArray.length; i++) { mapMarker[i] = new google.maps.Marker({ position: new google.maps.LatLng( parseFloat(gon.latArray[i]), parseFloat(gon.lngArray[i]) ), map: mapIs, }); **idが渡せていない様子なので、この辺りが問題ではないかと推測しています。** infoWindowContent[i] = '<div class="infoWindow">' + '<p>ABOUT: <a id="url" href="/abouts/42" target="_blank">直接idを指定すれば遷移可能</a></p>' + '<p>ABOUT: <a id="url" href="/abouts/gon.aboutIdArray[i]" target="_blank">id反映されていない</a></p>' + '<div class="infoWindowName">' + "<%= gon.nameArray[i] %>" + "</div>" + '<div class="infoWindowAbout">' + "</div>" + "</div>"; mapInfoWindow[i] = new google.maps.InfoWindow({ content: infoWindowContent[i], }); markerEvent(i); } } function markerEvent(i) { google.maps.event.addListener(mapMarker[i], "mouseover", function () { mapInfoWindow[i].open(map, mapMarker[i]); }); } // 念の為コントローラーも記載します。 #maps.controller.rb class MapsController < ApplicationController def index gon.nameArray = [] gon.aboutIdArray = [] gon.latArray = [] gon.lngArray = [] gon.invArray = [] userIdArray = [] noneAboutUserIdArray = [] User.all.each do |user| userIdArray << user.id end userIdArray.each do |userId| if About.where(user_id: userId).blank? noneAboutUserIdArray << userId end end User.all.each do |user| noneAboutUserIdArray.each do |noneAboutUserId| if user.id == noneAboutUserId else gon.nameArray << user.name end end end About.all.order(user_id: "ASC").each do |about| gon.aboutIdArray << about.id gon.latArray << about.latitude gon.lngArray << about.longitude gon.invArray << about.invitation end end end
試したこと
【試行1】具体的なid番号直打ち 下記ソースコードのように直接id番号を指定した場合、プロフィールページへ遷移可能です。 > '<p>ABOUT: <a id="url" href="/abouts/42" target="_blank">直接idを指定すれば遷移可能</a></p>' よって、id番号を取ってこれれば、showへ遷移可能と考えています。 【試行2】指定する配列(id番号が並んでいます)が取れているか確認 for文の中で確認したところ、数字の形でデータは取得出来ていそうです。 ※並び順はコントローラーで指定した通りです。 #console.log(i); =>[0,1,2,3,4,5,6,7,8,9,10,11] #console.log(gon.aboutIdArray[i]); =>[43,41,42,46,48,50,53,54,55,56,57,58] よって、gonでのデータ渡し及び、for文での配列の要素の指定はできると考えます。 infoWindowの中で呼び出すにはどうしたらよいのでしょうか。。。 【試行3】google.maps.InfoWindow内で直接、配列要素を参照しようとした場合 infoWindowContent[i]を使わずに、 google.maps.InfoWindow内へ直接記載しました。 >mapInfoWindow[i] = new google.maps.InfoWindow({ > content: > '<div class="infoWindow">' + > '<p>ABOUT: <a id="url" href="/abouts/42" target="_blank">直接idを指定すれば遷移可能</a></p>' + > '<p>ABOUT: <a id="url" href="/abouts/gon.aboutIdArray[i]" target="_blank">id反映されていない</a></p>' + > '<div class="infoWindowName">' + > "<%= gon.nameArray[i] %>" + > "</div>" + > '<div class="infoWindowAbout">' + > "</div>" + > "</div>", >}); 結果は変わらず、/abouts/gon.aboutIdArray[i]、の指定のままでした。 (配列の要素を一つづつ拾ってきて、/abouts/42 、のようにはなりませんでした)
原因の予想は立てられたものの、どう解決したらよいか分からずにいます。
ネットで記事を探しましたが見つけられず、解決策や試行案を教えて頂けると幸いです。
確認漏れや疑問点などありましたらご指摘ください。
よろしくお願いいたします。
補足事項
Rails 5.2.4.3
ruby 2.5.1
MySQL 5.6.47
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/04 22:13