2017-03-05 87 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