Geocoder gem延迟导致页面失败

时间:2011-12-05 16:08:46

标签: ruby-on-rails rails-geocoder

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

那么我应该怎样做以确保位置变为“巴黎,法国”是地理编码器的IP或地址无效?

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

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

我很困惑,我现在可以解决后者问题。

干杯,

乔尔

1 个答案:

答案 0 :(得分:0)

Occasionaly Geocoder可以在不引发异常的情况下返回错误。这是因为您使用的API(谷歌,雅虎等)返回API错误。默认API是谷歌。它们的每日请求限制为2500,如果您未使用已注册的API密钥,则使用服务器的IP地址来确定是否超出限制。这是导致问题的最可能原因。

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

我相信你可以这样检查:

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