2017-03-05 90 views
0

我對我的Rails應用程序使用地理編碼器並嘗試返回我當前位置附近的公園列表。下面的代碼正在工作,但當然只是返回公園距離給定的公園(當前對象)。不知道如何做到這一點與當前的位置。任何幫助將不勝感激。在視圖中使用Rails通過地理編碼器返回當前位置附近的位置

代碼:

<% @parks.each do |park| %> 
<%park.nearbys(1.9).each do |near_park| %> 
<li><%= link_to near_park.name%> (<%= near_park.distance.round(2)%> kms)</li> 
<% end %> 

控制器設置:

class SearchController < ApplicationController 

    def new 
    @parks = Park.all 
    @activities = Activity.all 
    end 

    def address 
    @address = Park.find(params[:address]) 
    Geocode.search("@address") 
    end 

初始化器:

Geocoder.configure(

# geocoding service: 
:lookup => :google, 

# IP address geocoding service: 
:ip_lookup => :maxmind, 

# to use an API key: 
:api_key => 'API KEY', 

# this is very important option for configuring geocoder with API key 
:use_https => true, 

# geocoding service request timeout, in seconds (default 3): 
:timeout => 3, 

# set default units to kilometers: 
:units => :km, 
) 

型號:

Class Park < ApplicationRecord 
    has_many :park_activities 
    has_many :activities, through: :park_activities 
    has_many :events, through: :park_activities 

    validates :name, :address, presence: true 

    # accepts_nested_attributes_for :activities 
    geocoded_by :address  # can also be an IP address 
    after_validation :geocode, :if => :address_changed? 

end 

回答

1
class ParksController 
    def nearby 
    @parks = Park.near([params.fetch(:lng){ 0 }, params.fetch(:lon){ 0 }], params.fetch(:radius){ 20 }) 
    end 
end 

爲了得到(使用Ajax時)在客戶端您可以使用地理定位用戶位置,或者在服務器上的IP lookup

# ip based lookup example. 
class ParksController 
    def nearby 
    @location = request.location 
    if @location 
     @parks = Park.near(@location) 
    else 
     flash.now[:error] = "Location not available" 
     @parks = Park.all 
    end 
    end 
end 
+0

非常感謝回覆Max。我是初學者,所以請和我一起裸照。我不理解如何在服務器上進行IP查詢。初始化器配置爲使用:ip_lookup =>:maxmind,但我不知道如何使用它。 – frankburke333

+0

您可以使用'request.location',它將返回nil或'Geocoder :: Result'對象。 – max