我不知道如何让我的代码变得更好和干净......在某些情况下我仍然会得到一个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消失了...... ??
我很困惑,我现在可以解决后者问题。
干杯,
乔尔
答案 0 :(得分:0)
Occasionaly Geocoder可以在不引发异常的情况下返回错误。这是因为您使用的API(谷歌,雅虎等)返回API错误。默认API是谷歌。它们的每日请求限制为2500,如果您未使用已注册的API密钥,则使用服务器的IP地址来确定是否超出限制。这是导致问题的最可能原因。
在访问@location
变量之前,您需要检查其中是否存在实际数据。
我相信你可以这样检查:
puts @location[:country_code] unless @location.empty?