RailsでGoogleMapを表示させる
gem 'gmaps4rails'の使い方 の手順をまとめてみた。
やりたいことはこれ
エラー cannot load such file -- coffee_script
公式サイト
いきなりエラー cannot load such file -- coffee_script
idがかぶるとありえない。だめ JavaScriptが意図しない動きになる。 原因 あちこちsubmitがある。 理由 画面が別れていてもどこの画面であっても問題ない。パーシャルになっていても同じ画面ならファイル違っていてもJavaScriptなので、submit取得できる。
住所表示ボタン
<%input id="submit"class="btn btn-primary" type="button" value="住所をを表示">
formのsubmitは
<%= form.submit %>
これらは別物である。
気を取り直し、コントローラのソースを見る.
def index @datperson2s = Datperson2.all @hash = Gmaps4rails.build_markers(@datperson2s) do |user, marker| marker.lat user.latitude marker.lng user.longitude end end
はじめ理解できなかった。これRubyは引数の()を省略できる。
marker.lat(user.latitude)
これと同じである。
marker.latは 関数のようである。 リファレンスのここでチェック。
Google-Maps-for-Rails/markers_builder.rb at master · apneadiving/Google-Maps-for-Rails · GitHub
51行目付近にある。
def lat(float) @hash[:lat] = float end
セッタのようになっている git で公開しているものはソースで確認すること!
HTMLに組み込む時、ERBではコピペで組み込める。slimを使う意味がわからない。HTMLからすべて作る場合はいいかもしれない。
リファレンス確認しながら進める。
1)gemはok
2)HTMLも書いた
見つからなければエラーになるので大丈夫
3)JavaScriptはapplication.html.rbに記載した
もともとあったのがおかしかった 文字がエスケープされていた
4) Javascript source code
アセットパイプラインに入れないといけないので sprocketというjemに書き出される
アセットパイプラインとは
JavaScriptやCSSを最小化して連結するフレームワーク gem 'sass-rails' gem 'uglifier' gem 'coffee-rails'
これらのgemを利用する よってコーヒー使わなくてもコヒーを削除してはいけない ただコーヒーファイルをjsに変更するだけでよい。
ウエブページをレンダリングする際に、リクエストをへらすことができる
If you don't have asset pipeline, you'll need to import the js OR coffee files: rails g gmaps4rails:copy_js
rails g gmaps4rails:copy_coffee アセットが無いならこれを使いなさい あるからいらない
5) Javascript code:
スクリプトタグの中に書いた グーグルはコメントした
handler = Gmaps.build('Google'); handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){ markers = handler.addMarkers([ { "lat": 0, "lng": 0, "picture": { "url": "http://people.mozilla.com/~faaborg/files/shiretoko/firefoxIcon/firefox-32.png", "width": 32, "height": 32 }, "infowindow": "hello!" } ]); handler.bounds.extendWith(markers); handler.fitMapToBounds(); });
6) Add options: グーグルのオプションを利用したいときはこのようにする
Generating JSON これはコントローラに書いている
@users = User.all @hash = Gmaps4rails.build_markers(@users) do |user, marker| marker.lat user.latitude marker.lng user.longitude end
ここでビューに渡している In your view:
これを利用して、上記を書き換えた。 これがコントローラーからviewへ値を出力しているところ。
このアプリでは、MAPをいろんなところから読み込むので ハッシュに入っていないと表示できない indexはいい。もう詰め込んであるのを表示するだけなので。 editでは,addmarkerを呼んであげないといけない。グーグルの関数で動的にやっていかないといけない。
エラーfirstchildがnill 一度railsのサーバーを再起動してみる。これは イニシャライズで読み込まれたり、アセットパイプラインを変更した場合エラーが治る可能性があるためである。 ここを見ると、DOM構築後に読み出さないといけない。読み込みのタイミングだけの話 https://github.com/apneadiving/Google-Maps-for-Rails/issues/534
onloadの書き方。ここをみて修正 https://developer.mozilla.org/ja/docs/Web/API/GlobalEventHandlers/onload
普通はクリックするとページが切り替わる。 ターボリンク使うと中身をAjaxが全部書き換えている 実際にはページ遷移していないのでページ書き換わらない。 そのタイミングでJavaScriptを走らせる
document.addEventListener('turbolinks:load', function() { });
このgemは一体なんなのか?railsのコントローラとviewを簡単につなげてくれるgemである。 editではjavascriptで動的に追加しないといけない
フロントでJavaScriptで詰め込まないといけない。取得したものをinnerHTMLで入力か? 位置情報の修正はjavascriptで行うしか無い。 以上!