2015-11-02 2 views
0

Я хочу отображать карты google с центром в местоположении пользователя. Я готов использовать gmaps4rails и geokit-rails драгоценных камней, потому что я думаю, что это самые лучшие.RoR: Как получить lat и lng с помощью geokit-rails

То, что я до сих пор является инициализация карты:

<div style='width: 800px;'> 
    <div id="map" style='width: 800px; height: 400px;'></div> 
</div> 

<script> 
$(document).ready(function(){ 
    handler = Gmaps.build('Google'); 
    handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){ 
    markers = handler.addMarkers([ 
     { 
     "lat": 0, 
     "lng": 0, 
     "picture": { 
      "url": "https://addons.cdn.mozilla.net/img/uploads/addon_icons/13/13028-64.png", 
      "width": 36, 
      "height": 36 
     }, 
     "infowindow": "hello!" 
     } 
    ]); 
    handler.bounds.extendWith(markers); 
    handler.fitMapToBounds(); 
    }); 
}); 
</script> 

, который работает отлично. Теперь проблема состоит в том, чтобы получить широту и длину на основе IP-адреса пользователя. Это то, что я пытаюсь, но я не получаю никакого результата. В контроллере я стараюсь, чтобы получить место, используя geokit драгоценный камень, но он не:

def view 
    @location = IpGeocoder.geocode('181.169.135.95') #I know here I should use `request.remote_ip`, but as I am on localhost I can't 
end 

Я получил это от geokit github, но он не работает.

You can obtain the location for an IP at any time using the geocoder as in the following example:

location = IpGeocoder.geocode('12.215.42.19')

where Location is a GeoLoc instance containing the latitude, longitude, city, state, and country code. Also, the success value is true.

Я получаю следующее сообщение об ошибке: uninitialized constant WineryController::IpGeocoder. Может ли кто-нибудь объяснить мне, что это значит, и как идти дальше? Я подозреваю, что это может быть что-то действительно глупое, но я все еще новичок в рельсах.

+1

попробовать '@location = :: IpGeocoder.geocode ('181.169.135.95')' –

+0

@BradWerth Я попробовал, и я получил 'неинициализированным постоянной IpGeocoder' –

+0

Это звучит, как вы missing a require –

ответ

0

попробовать что-то вроде этого:

application_controller.rb

class ApplicationController < ActionController::Base 
    # Auto-geocode the user's ip address and store in the session. 
    geocode_ip_address 
    def geokit 
    @location = session[:geo_location] # @location is a GeoLoc instance. 
    end 
end 

Затем на ваш взгляд, можно отобразить IP-адрес на значения хэш:

<%= [@location['lat'],@location['lng']] %> 

Ключевым уроком здесь является то, что сеанс Ruby представляет собой хэш-тип данных. Следовательно, значения хэша должны быть получены путем вызова хеш-ключа, например @location['lat'] и @location['lng'].

Подробнее: Ruby - getting value of hash

Смежные вопросы