Rails通过地理编码器返回当前位置附近的位置
问题描述:
我对我的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
答
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
非常感谢回复Max。我是初学者,所以请和我一起裸照。我不理解如何在服务器上进行IP查询。初始化器配置为使用:ip_lookup =>:maxmind,但我不知道如何使用它。 – frankburke333
您可以使用'request.location',它将返回nil或'Geocoder :: Result'对象。 – max