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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Gon

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Ruby on Rails

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google マップ

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

Q&A

解決済

1回答

1350閲覧

rails gem"gon"を利用したjavascriptファイルへのデータの引き渡しがうまくいかない。

jijijijijij

総合スコア0

Gon

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

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Ruby on Rails

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Google マップ

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

0グッド

0クリップ

投稿2021/01/05 04:27

rails gem"gon"を利用したjavascriptファイルへのデータの引き渡しがうまくいかない。

現在Googlemap APIを利用して、ユーザーがおすすめの場所を投稿、共有できるようなプロダクトを作成しております。
全投稿をマーカーとして表示したマップをホーム画面に表示しようかと考えているのですが、ピンが表示されず、お知恵をお借りいただけますと幸いです。

具体的には以下のようなコードを設定しております。

背景

  • PostモデルとSpotモデルを作成。Postモデルには投稿内容が、Spotモデルには位置情報(address, latitude, longitude)を保存している。
  • PostモデルとSpotモデルは一対一の関係。

homeページのコントローラー

ruby

1def home 2 @posts = Post.all.includes([:spot]) 3 gon.posts = @posts 4end

assets/javascript/googlemap.js

javascript

1let map 2let marker = []; 3let geocoder 4 5function initMap(){ 6 geocoder = new google.maps.Geocoder() //GoogleMapsAPIジオコーディングサービスにアクセス 7 map = new google.maps.Map(document.getElementById('map'), { //'map'というidを取得してマップを表示 8 center: {lat: 35.6594666, lng: 139.7005536}, //最初に表示する場所(今回は「渋谷スクランブル交差点」が初期値) 9 zoom: 15, //拡大率(1〜21まで設定可能) 10 }); 11 for (var i = 0; i < gon.posts.length; i++) { 12 var markerLatLng = new google.maps.LatLng({lat: gon.posts[i].spot.latitude, lng: gon.posts[i].spot.longitude}); // 緯度経度のデータ作成 13 marker[i] = new google.maps.Marker({ // マーカーの追加 14 position: markerLatLng, // マーカーを立てる位置を指定 15 map: map // マーカーを立てる地図を指定 16 }); 17}

エラー内容
上記のコードではピンが一件も表示されません。
エラー内容を確認してみると"property 'latitude' of undefined"とあり、gon.posts[i].spotにうまく位置情報が渡せていないことが原因と思われます。
イメージ説明
イメージ説明

行ったこと
0. 番号リストgon.posts[i].spot.latitude, gon.posts[i].spot.longitudeの値を具体的な緯度、経度の数字(渋谷スクランブル交差点 lat: 35.6594666, lng: 139.7005536)に直したところ、ピンは正常に渋谷スクランブル交差点に表示された。
0. 番号リストコントローラーで@post = Post.first、 gon.lat = @post.spot.latitude、 gon.lng = @post.spot.latitudeを定義しjavascriptのmarkerLatLngに挿入したところ、一件目の投稿に関するピンは正常に表示された。
0. 番号リストrailsコンソールで@posts = Post.allと定義し、@post[0].spot.latitudeと打ったところ、一件目の緯度情報が得られた。

以上のことからgon.posts=@postsで上手くgon.postsに情報を渡せていない or javascriptファイルにて情報を取り出す方法に問題があると考えております
どこが問題か、どこを修正するべきか、ご意見をいただけますと幸いです。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

いろいろいじくっていましたら解決いたしました。
参考までにコードを記載しておきます。

javascript

1for (var i = 0; i < markerData.length; i++) { 2 let id = markerData[i]['id'] 3 markerLatLng = new google.maps.LatLng({ 4 lat: markerData[i].latitude, 5 lng: markerData[i].longitude 6 }); 7 marker[i] = new google.maps.Marker({ 8 position: markerLatLng, 9 map: map 10 }); 11 }

投稿2021/01/06 07:25

jijijijijij

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問