使用Rails的地理编码宝石(geocoder gem),我如何获取访问者的城市?

11

https://github.com/alexreisner/geocoder

我找不到显示访问者IP地址对应城市的文档,虽然我知道使用HTML5可以实现,但我希望能够使用geocoder提供的值。谢谢。

4个回答

8
我花了几个小时才意识到答案非常简单:
request.location.city

Geocoder页面提供了这个例子,但我认为我需要声明request,但是不需要,没有其他需要的内容。

如果你没有Geocoder,你需要安装gem,但除此之外没有其他需要的内容。


当我执行此操作时,控制台显示空结果。我在地球上 ;) - Mani
当我按照这个例子操作时,出现了一个NameError错误,提示“request”未定义。为什么你没有遇到同样的问题? - calyxofheld

6
我是怎么做的——
location = Geokit::Geocoders::IpGeocoder.geocode(source_ip)
city = location.city
country = location.country

这里,source_ip是一个字符串对象。


1
# app/models/user.rb
geocoded_by :ip_address,
  :latitude => :lat, :longitude => :lon
after_validation :geocode

从地理编码器site中提取的片段。

我实际上正在寻找如何返回“nearbys”方法的访客结果,而不是用户。 - kinet

1

你可以用两种不同的方式来实现

1)如果你能够获取访问者的城市/地址字符串,那么地理编码器将自动将其转换为纬度和经度。

class Message < ActiveRecord::Base
  geocoded_by :full_address
  after_validation :geocode

  def full_address
    "#{city}, Sri Lanka"
  end

end

2) 否则你将不得不跟踪访问者的IP地址,例如在'geocoder' gem的主页

注意:你可以使用以下的near by方法

<Active Record Object List>.near(<City Name>, <distance>, :order => :distance)

Ex: @messages = @messages.near("colombo", 10, :order => :distance)

还有一个由Ryan在railscasts中制作的超级屏幕录像。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接