質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Gon

Gonとは、Railsの変数をJavaScriptで使えるように変換するgemです。これを用いることで、controller内でセットした変数をJavaScript内で使用できるようになります。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

Q&A

解決済

1回答

643閲覧

情報ウィンドウ(mapAPIのinfoWindow)のcontent内へ記載したリンクを押すと、プロフィールページへ遷移するようにしたいです。

RYtera

総合スコア8

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Gon

Gonとは、Railsの変数をJavaScriptで使えるように変換するgemです。これを用いることで、controller内でセットした変数をJavaScript内で使用できるようになります。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

0グッド

0クリップ

投稿2020/07/03 04:24

やりたいこと:情報ウィンドウ(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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

読みはあたっています。
href="/abouts/gon.aboutIdArray[i]"
これですと文字列定数ですからそのままわたってしまいます。
'<p>ABOUT: <a id="url" href="/abouts/' + gon.aboutIdArray[i] +'" target="_blank">
で試してください

投稿2020/07/04 12:47

編集2020/07/04 12:48
winterboum

総合スコア23567

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RYtera

2020/07/04 22:13

winterboum様 ご回答頂きありがとうございます! 数字の指定方法が異なっているとの事で、確認したところ 助言頂いた方法で解決しました! ベストアンサーにさせて頂きます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問