自分の手で未来を創るーlav0

自分のために、誰かのために、今ここにないもの、もっと良くしたいもの、何でも自分の手で創っていく。そして、作ったものを公開していきます

Rails のフォームの取り扱い

Rails のフォームに自動入力をする

 

現在作成中のアプリケーションにつけたかった機能がやっと!実装完了。今回取り入れた機能は、Google map上にマーカーを立てるとマーカーの位置情報を

 

f:id:kslabo51:20190816223744p:plain

フォームに自動的に入力してくれるというもの。今回、参考にさせていただいたサイトはこちらです。本当にありがとうございます!!マップとフォームは同じページに設定、Google Maps APIJavaScript APIとGeocode APIを使用しています。

 

ywatanab.hatenablog.com

 

今回は、導入したコードを少しだけ参考までに

 

//最初にフォームのコードから始めています//

<%= form_for(@fishmap) do |f| %>

<div class="field" id="map_add" type="text" value="">
<%= f.label :住所 %>
<%= f.text_field :address %>
</div>

<div class="field" id="latitude" type="text" value="">
<%= f.label :緯度 %>
<%= f.text_field :latitude %>
</div>

<div class="field" id="longitude" type="text" value="">
<%= f.label :経度 %>
<%= f.text_field :longitude %>
</div>

<div class="field">
<%= f.label :記事 %>
<%= f.text_area :mapcontent, placeholder: "一言" %>
</div>

<div class="actions">
<%= f.submit "投稿", class: "btn btn-primary" %>
</div>

<span class="picture">
<%= f.file_field :picture, accept: 'image/jpeg,image/gif,image/png'%>
</span>
<% end %>

 

(中略)

//こっからGooglemapのコードが始まりますがまずは入力というボタンをつけています。//

<div class="col-md-8">
<h3>Google map</h3>
<p><button id="inputmap">入力</button></p>
<div id="target" style='width: 100%; height: 500px;'></div>

 

(中略)

 

//そして下記のコードがマップの位置情報を取得し入力ボタンを押すと最初のフォームの中に取得したそれぞれの位置情報が自動で入ります//

map.addListener('click', function(a) {
geocoder.geocode({
location: a.latLng
}, function(results, status) {
if (status == 'OK') {
new google.maps.Marker({
position: a.latLng,
map: map,
title: results[0].formatted_address,
animation: google.maps.Animation.DROP

});
var pos = new google.maps.LatLng(results[0].geometry.location.lat(), results[0].geometry.location.lng());
document.getElementById("inputmap").onclick = function () {
$('#fishmap_latitude').val(pos.lat());
$('#fishmap_longitude').val(pos.lng());
$('#fishmap_address').val(results[0].formatted_address);

}
}
});
});

そもそもユーザーさんがマップ上に記事を投稿できる機能の実装で、ユーザーさんの操作を減らすために、住所、緯度、経度の項目はマーカーを立てることで取得、フォームに自動入力というようにしたかったんですが、だいぶ苦労しました。

 

しかし、このコードでGoogle map上に

 ①マーカーを立てる 

 ②マップ上部の入力ボタンを押す

 ③フォームにマーカーの住所、緯度、経度情報が自動入力されます。

という機能を実装できました。ふーー!!