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

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

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

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

Google マップ

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

Q&A

解決済

1回答

3584閲覧

【Rails5 GoogleMaps】都道府県・市町村など個々のカラムから座標取得Gem「geocoader」で緯度・経度を取得したい

besuko

総合スコア16

Ruby on Rails

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

Google マップ

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

0グッド

2クリップ

投稿2017/02/12 02:14

###環境
Ruby2.3.3
Rails5.0.1

###Gem
gem 'geocoder'

###テーブル例

郵便番号都道府県市町村その他全住所緯度経度
107-0052東京都港区赤坂1-1-1東京都港区赤坂1-1-135.6727516139.7254066

###問題
店舗登録が出来るウェブアプリケーションを作成しています。
これまで全住所カラムに住所を手入力し、Gem「geocoader」を用いて緯度と経度を取得していました。

このたび郵便番号の入力で都道府県と市町村の取得し、番地を手打ちで入力する方式に変更しました。
カラムは「都道府県」「市町村」「その他」と分かれています。

これら「都道府県」「市町村」「その他」を全住所カラムに反映させる方法はありませんでしょうか。
もしくは「都道府県」「市町村」「その他」から直接geocoaderで緯度と経度を取得する方法はありますでしょうか。
###Apprication.html.erb
jpostalから住所データを取得しています。

<head> <script type="text/javascript" src="//jpostal-1006.appspot.com/jquery.jpostal.js"></script> </head> <script type="text/javascript"> $(function() { $(window).ready( function() { $('#zipcode').jpostal({ postcode : [ '#zipcode' ], address : { '#prefecture': '%3', '#city' : '%4', '#other' : '%5', '#address' : '%3%4%%5' } }); }); }); </script>

###_form.html.erb
hidden_fieldで値を取得できないものかと思いましたが、反映されないので何かが間違っているのかと思います。

<%= form_for @shop do |f| %> <%= f.label :zipcode %> <%= f.text_field :zipcode, id:'zipcode' %><br> <%= f.label :prefecture %> <%= f.text_field :prefecture, id:'prefecture' %><br> <%= f.label :city %> <%= f.text_field :city, id:'city' %><br> <%= f.label :street_number %> <%= f.text_field :street_number, id:'street_number' %><br> <%= f.label :address %> <%#= f.hidden_field :address, id:'address' %><br> <%= f.text_field :address, id:'address' %><br> <%= f.submit "登録", :class => 'btn btn-primary', data: { disable_with: '登録中...' } %> <% end %>

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

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

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

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

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

guest

回答1

0

ベストアンサー

geocoaderがいつのタイミングで発火しているかは存じませんが

ruby

1shop.rb 2before_save: :concat_address 3def concat_address 4address=[prefecture,city,street_number].join('') 5end

とかではダメなのですか?
先にgeocoaderでエラーが出るなら
before_saveを、after_validationに変えるとか

投稿2017/02/13 06:45

moke

総合スコア2241

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

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

besuko

2017/02/13 07:25

moke様 ご回答頂きありがとうございます。 geocoaderはafter_validationとしています。 教えて頂きましたように致しましたがaddress情報は反映されず空欄のまま保存されてます。 恐れ入りますが結合されたaddessを使う方法を教えて頂けませんでしょうか。。 shop.rb ```Ruby before_save :concat_address after_validation :geocode, if: :address_changed? def concat_address address=[prefecture,city,street_number].join('') end ```
moke

2017/02/13 07:52 編集

after_validationの後before_saveが発火しますので after_validation :concat_address,:geocode とか after_validation :concat_address after_validation :geocode, if: :address_changed? とか before_save :geocode, if: :address_changed? after_validation :concat_address とかして見て良いのを選んでください
besuko

2017/02/16 12:07

その後、モデル内で結合した値をデータベースに保存する方法が分からずにいましたが、別の方法で解決致しました。 目的は郵便番号から都道府県と市町村を取得して、それ以降の住所を手打ちで入力したものをgeocoaderで座標を取得するということでした。 なお都道府県と市町村は検索出来るよう個別のカラムに保存したいと考えていました。 それで、フォームを以下のように書き換え解決致しました。 ``` <!DOCTYPE html> <html> <head> <script type="text/javascript" src="//jpostal-1006.appspot.com/jquery.jpostal.js"></script> </head> <%= simple_form_for(@shop) do |f| %> <%= f.input :zipcode, label: "郵便番号" %> <%#= f.input :prefecture, label: "都道府県" %>    ↓ <%= f.hidden_field :prefecture %> <%#= f.input :city, label: "市町村" %>    ↓ <%= f.hidden_field :city %> <%= f.input :address,label: "住所" %> <% end %> <script type="text/javascript"> $(function() { $(window).ready( function() { $('#zipcode').jpostal({ postcode : [ '#shop_zipcode' ], address : { '#shop_prefecture': '%3', '#shop_city' : '%4', '#shop_address' : '%3%4' } }); }); }); </script> ``` ただし今回はたまたま別の方法で解決できましたが、モデル内での結合等は今後も必要になるかと思いますので勉強しておきます。 お忙しい中ヒントを下さり、また最後までご丁寧にお付き合い頂き本当に有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問