1

我不知道如何让我的代码变得干净整洁......在某些情况下我仍然会得到一个 nil 位置对象,我试图避免这种情况......而且我无法在办公室重现错误。在那之前,我通过电子邮件收到那些错误,其中应用程序无法在 nil 对象(位置对象)上找到纬度或 country_code

那么我应该怎么做才能确保该位置成为“法国巴黎”是IP或地址不适用于Geocoder?

def find_current_location_from_ip(ip)
    unless Geocoder.search(ip).nil? || Geocoder.search(ip)[0].nil?
      @location = Geocoder.search(ip)[0].country_code == "RD" ? 
          Geocoder.search("Paris, France")[0] : Geocoder.search(ip)[0]
    else
      @location = Geocoder.search("Paris, France")[0]
    end
    @location
end

def find_current_location_from_address(address)
    Geocoder.search(address).blank? ? 
        Geocoder.search("Paris, France")[0] : Geocoder.search(address)[0]
end

任何提示都会很棒。此外,如果我刷新页面,位置会突然正确,并且 country_code on nil object 错误消失......??

我对我现在可以解决后者感到有点困惑。

干杯,

乔尔

4

1 回答 1

0

有时,地理编码器可以返回错误而不会引发异常。这是当您使用的 API(google、yahoo 等)返回 API 错误时引起的。默认 API 是谷歌。他们的每日请求限制为 2500,如果您没有使用您注册的 API 密钥,则会使用服务器的 IP 地址来确定是否超出限制。这是您问题的最可能原因。

@location在访问变量之前,您需要检查变量中是否确实存在数据。

我相信你可以这样检查:

puts @location[:country_code] unless @location.empty?

于 2012-02-21T02:03:56.913 回答