teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

gem geocoderを削除

2020/10/12 00:46

投稿

kanako417
kanako417

スコア1

title CHANGED
@@ -1,1 +1,1 @@
1
- Googleのgeocoder APIで経度と緯度がDB保存されない
1
+ Googleのgeocoding APIで詳細ページ地図表示
body CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  使用しているgemは以下です。(開発環境は補足情報に記載しています。)
8
8
  ```gemfile
9
- gem 'geocoder'
9
+ gem 'geocoder' =>今回の実装では使用しないので削除しました。
10
10
  gem 'gmaps4rails'
11
11
  gem 'gon'
12
12
  gem 'dotenv-rails'
@@ -98,19 +98,21 @@
98
98
 
99
99
  ### 試したこと
100
100
 
101
- API keyを更新して、環境変数に新たに設定。
101
+ - API keyを更新して、環境変数に新たに設定。
102
102
  API KEYも環境変数に入れて、rails cで環境変数を確認したところ、きちんとAPI keyが呼び出されます。
103
+
103
- HTTPリファラーを制限。
104
+ - HTTPリファラーを制限。
104
105
  localhost:3000/*
105
- ・modelファイル内の記述、after_validation :geocode から before_save :geocode変更。
106
+ 本番環境のリファラーも追加すること忘れず
106
107
 
108
+
109
+
107
110
  ### 変更点・改善点
108
111
  ・geocoder APIを新たに利用。
109
- ・認証情報のAPIの制限をgeocoder APIと Maps Javascript APIのみに制限。
112
+ ・認証情報のAPIの制限をgeocoding APIと Maps Javascript APIのみに制限。
110
113
  ・gonを使用して、ビューファイルで経度緯度を読み込めるように、controllerとビューのJS内の記述を変更。
111
114
 
112
115
 
113
116
  ### 補足情報(FW/ツールのバージョンなど)
114
- gem 'geocoder' ~>(1.6.3)
115
117
  gem 'rails', '~> 6.0.0'
116
118
  gem 'mysql2', '>= 0.5.3'

3

タイトルの変更

2020/10/12 00:46

投稿

kanako417
kanako417

スコア1

title CHANGED
@@ -1,1 +1,1 @@
1
- airbnbように、投稿毎にgoogle map APIを使用しての地図表示出来ない
1
+ Googlegeocoder APIで経度と緯度DBに保存されない
body CHANGED
@@ -12,6 +12,7 @@
12
12
  gem 'dotenv-rails'
13
13
  ```
14
14
 
15
+ 使用している、APIは、maps javascript APIと Geocoding APIの二つです。
15
16
 
16
17
  ### 実現したいこと
17
18
  以下airbnbの詳細ページのように、宿を投稿するごとにそれぞれの大体のエリア表示をさせたいです。

2

google geocoderAPIを利用することに変更。

2020/09/29 06:52

投稿

kanako417
kanako417

スコア1

title CHANGED
File without changes
body CHANGED
@@ -2,6 +2,8 @@
2
2
  現在、airbnbのような宿検索アプリの個人開発を制作中です。
3
3
  そこで、airbnbのように投稿するごとに、宿それぞれの大体のエリアの表示を詳細ページに記載する実装を行っているのですが、
4
4
  **最初の投稿以降、他の詳細ページにはGoogle Mapが表示されません。**
5
+ 1件目の投稿以降、データベースに経度緯度の値も保存されません、、。
6
+
5
7
  使用しているgemは以下です。(開発環境は補足情報に記載しています。)
6
8
  ```gemfile
7
9
  gem 'geocoder'
@@ -24,44 +26,10 @@
24
26
 
25
27
 
26
28
  ```console
27
- oe {message: "initMap is not a function", name: "InvalidValueError", stack: "Error↵ at new oe (https://maps.googleapis.com/m…khA-cvzts98u4gW1EZtxGCZA&callback=initMap:144:123"}message: "initMap is not a function"name: "InvalidValueError"stack: "Error↵ at new oe (https://maps.googleapis.com/maps/api/js?key=APIKEY&callback=initMap:70:72)↵ at Object._.pe (https://maps.googleapis.com/maps/api/js?key=APIKEY&callback=initMap:70:182)↵ at Wj (https://maps.googleapis.com/maps/api/js?key=APIKEY&callback=initMap:144:238)↵ at https://maps.googleapis.com/maps/api/js?key=APIKEY&callback=initMap:144:123"__proto__: Error
28
- _proto__: Error
29
- constructor: ƒ (a)
30
- Xo: ƒ (d,e,f)
31
- arguments: null
32
- caller: null
33
- length: 3
34
- name: ""
35
- prototype: {constructor: ƒ}
36
- __proto__: ƒ ()
37
- apply: ƒ apply()
38
- arguments: (...)
39
- bind: ƒ bind()
40
- call: ƒ call()
41
- caller: (...)
42
- constructor: ƒ Function()
43
- length: 0
44
- name: ""
45
- toString: ƒ toString()
46
- Symbol(Symbol.hasInstance): ƒ [Symbol.hasInstance]()
47
- get arguments: ƒ ()
48
- set arguments: ƒ ()
49
- get caller: ƒ ()
50
- set caller: ƒ ()
51
- __proto__: Object
52
- [[FunctionLocation]]: <unknown>
53
- [[Scopes]]: Scopes[0]
54
- [[FunctionLocation]]: js?key=APIKEY&callback=initMap:32
55
- [[Scopes]]: Scopes[3]
56
- md: {name: "Error", message: "", constructor: ƒ, toString: ƒ}
57
- arguments: null
58
- caller: null
59
- length: 1
60
- name: "oe"
61
- prototype: Error {constructor: ƒ}
62
- __proto__: ƒ ()
63
- [[FunctionLocation]]: js?key=APIKEY&callback=initMap:70
64
- [[Scopes]]: Scopes[2]
29
+ - InvalidValueError: setCenter: not a LatLng or LatLngLiteral with finite coordinates: in property lat: not a number
30
+
31
+ - InvalidValueError: setPosition: not a LatLng or LatLngLiteral: in property lat: not a number
32
+
65
33
  ```
66
34
 
67
35
  ### 該当のソースコード
@@ -77,17 +45,19 @@
77
45
  end
78
46
  end
79
47
 
80
- def show
48
+ def show
81
49
  @lodge = Lodging.find(params[:id])
50
+ gon.lodge = @lodge
82
51
  end
83
52
  ```
84
53
 
54
+
85
- google map APIgem 'geocoder'を使用して
55
+ **google map APIgem 'geocoder'・googleのgeocoder APIを使用して**
86
56
  投稿ページに都道府県と市区町村までを入力させ、:prefecture_cityとしています。
87
-
57
+ railsのコールバックである、before_saveを利用して、登録と更新のどちらの場合にも同じ処理を行えるように記述を変更しました。
88
58
  ```model
89
59
  geocoded_by :prefecture_city
90
- after_validation :geocode
60
+ beore_save :geocode
91
61
  ```
92
62
  上記の記述でnew.html.erbファイルに:prefecture_cityカラムを入力した後に
93
63
  geocodeで経度と緯度に変換して、詳細ページで以下のように表示させる記述をしています。
@@ -107,9 +77,9 @@
107
77
  <script type="text/javascript">
108
78
  var map;
109
79
  var marker;
110
- var pin = {lat: <%= @lodge.latitude %>, lng: <%= @lodge.longitude %>};
80
+ var pin = { lat: gon.lodge.latitude, lng: gon.lodge.longitude };
111
81
  function initMap() {
112
-
82
+ geocoder = new google.maps.Geocoder()
113
83
  var map = new google.maps.Map(document.getElementById('map'), {
114
84
  zoom: 12,
115
85
  center: pin
@@ -131,8 +101,14 @@
131
101
  API KEYも環境変数に入れて、rails cで環境変数を確認したところ、きちんとAPI keyが呼び出されます。
132
102
  ・HTTPリファラーを制限。
133
103
  localhost:3000/*
134
- ブラリ全てを有効化し、API制限無し設定
104
+ modelファル内記述、after_validation :geocode から before_save :geocode変更
135
105
 
106
+ ### 変更点・改善点
107
+ ・geocoder APIを新たに利用。
108
+ ・認証情報のAPIの制限をgeocoder APIと Maps Javascript APIのみに制限。
109
+ ・gonを使用して、ビューファイルで経度緯度を読み込めるように、controllerとビューのJS内の記述を変更。
110
+
111
+
136
112
  ### 補足情報(FW/ツールのバージョンなど)
137
113
  gem 'geocoder' ~>(1.6.3)
138
114
  gem 'rails', '~> 6.0.0'

1

タグの変更

2020/09/29 06:49

投稿

kanako417
kanako417

スコア1

title CHANGED
File without changes
body CHANGED
File without changes