2017-07-09 10 views
-1

私は "Imovels"(プロパティ)のCRUDを持っているので、データベースには別のフィールドに住所があります。つまり:Google Maps rails 5

<%= f.text_field :logradouro %> # street name 
<%= f.number_field :numero %> # number 
<%= f.collection_select :bairro_id, @bairros, :id, :nome, {} %> # neighborhood 
<%= f.collection_select :cidade_id, @cidades, :id, :nome, {} %> # city 

私はgemaps4railsを使用してマップ上の場所を表示しています。私は宝石のドキュメントのチュートリアルに従いますが、マップはレンダリングされません。プーマログで
は、2つのエラー

ActionController::RoutingError (No route matches [GET] "/assets/underscore-min.map"): 

NoMethodError (undefined method `geocoded_by' for #<Class:0x007fe7c02f2fb0>): 

を示しモデル:

class Imovel < ApplicationRecord 
    geocoded_by :enderecoCompleto 
    after_validation :geocode 
end 

連結します

def show 
    @enderecoCompleto = "#{@imovel.logradouro}, #{@imovel.cidade.nome}" 
end 

ビュー: ここで私は上基づか地図を表示したいですendereçoCompleto、それは通りの名前と都市です。私は本当にここで進める方法を知らない。

<div style='width: 800px;'> 
    <div id="map" style='width: 800px; height: 400px;'></div> 
</div> 
    <script> 
    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(); 
    }); 
    </script> 
</div> 

私はモデルにそのコードを聞かせている場合、返されるエラーは次のとおりです。

NoMethodError (undefined method `geocoded_by' for #<Class:0x007fe7c02f2fb0>): 

私は上記の方法。 この地図をデータベースのアドレス(緯度と経度なし)に基づいてレンダリングするにはどうすればよいですか?

@imple limeの助けを借りて、ジオコーディングされた問題は解決されましたが、ページはレンダリングされますが、マップは表示されません。実際には、他のJavaScriptコードを台無しにしました。ターボリンクと関連しているようだ。 application.jsで

<script async defer 
    src="https://maps.googleapis.com/maps/api/js?key=XXXXXX&callback=initMap"> 
</script> 
<script src="//cdn.rawgit.com/mahnunchik/markerclustererplus/master/dist/markerclusterer.min.js"></script> 
<script src='//cdn.rawgit.com/printercu/google-maps-utility-library-v3-read-only/master/infobox/src/infobox_packed.js' type='text/javascript'></script> 

:ビューで

コンソールで

//= require underscore 
//= require gmaps/google 

the gem +のIT上のユーチューブの動画を見てみると

enter image description here

答えて

1

GitHubページ。 appearsgeocoder gemもインストールする必要があります。それはあなたにgeocoded_byメソッドを与えるものです。

geocoderを見ると、latitude:float longitude:floatをモデルに追加すると、モデルにあるafter_validation :geocodeのものが自動的に取得され、更新されます。そこから、あなたは自分のビューのおlatitudelongitudeを渡すことができ、それらと

 "lat": 0, 
     "lng": 0, 

を交換してください。 geocoder gemページを読んで、そこにいくつかの便利なことがあることを確認してください。

編集

最新の問題については、私はJavaScriptを使用して素晴らしいではありませんが、私はasync deferを削除しようとすると、あなたが定義した関数を持っていないので、あなたのGoogleからの&callback=initMapではJavaScriptタグを(マッピングしていると思いますその名前)。

オリジナルの回答は、コードの実際の問題ではなく、質問のタイプミスであった可能性があります。

NoMethodErrorは、タイプがgecoded_byである可能性があります。geocoded_byである必要があります。 RoutingErrorは、問題のないソースマップファイル用です。

+0

答えてくれてありがとう本当に間違っていますが、それを修正してもエラーは続きます。 – SuBzer0

+1

問題が解決しない場合は、モデルとビューの詳細を確認する必要があります。少なくとも、宝石のモデルの関連部分、マップをレンダリングしようとしているhtml、使用されているjavascript。また、「緯度と経度なし」では、それらをまったく保管しないようにしようとしていますか?あなたがそれらを必要としているように見える宝石を見ている(間違っているかもしれない、それを自分で使ったことはない) –

+0

ちょうど、より多くの情報でポストを編集しました。私は経度の店舗の緯度に問題はありませんが、私はユーザーに検索を強制したくありません。 – SuBzer0