我在我的rails2应用程序中使用ruby geocoder gem。当用户尝试注册时,我正在使用他的ip并使用地理编码器获取lat和long。接下来,获取用户输入的地址并获取纬度和经度。最后检查两者之间的距离。如果距离大于100,则添加错误。这发生在before_create回调中(根据客户要求)。但是这里的问题是地理编码器正在发送连续请求并且中断.Below是我的代码。
给出一些虚拟地址和ip用于测试目的。
def validate_address_and_ip
p "validate_address_and_ip"
dup_addr = "Level 8, Umiya Business Bay Tower 1,Cessna Business Park, Maratahalli ORR,Sarjapur Ring Road, Kadubeesanahalli,Bangalore"
ip_based_lat_lng = Geocoder.search("183.82.98.134").map{ |obj| [obj.latitude, obj.longitude] }.flatten#ip_address
p "ip_based_lat_lng=", ip_based_lat_lng
addr_results = Geocoder.search(dup_addr)#address.full_address
addr_based_result = addr_results.first.geometry["location"]
lat,lang = addr_based_result["lat"], addr_based_result["lng"]
dist_in_miles = Geocoder::Calculations.distance_between(ip_based_lat_lng, [lat, lang]).round
puts "***************#{dist_in_miles}*******************************"
if 300 > 100
p "*****************in if condition**********************"
self.errors.add_to_base('zip code and IP mismatch.')
return false
puts "***************#{self.errors}*******************************"
end
end
Error: Numerical argument out of domain - sqrt
在日志中获取
“validate_address_and_ip” “ip_based_lat_lng =” [17.3753,78.4744] 的 * ** * ** 311 的 * ** * ** * ** * ** * ** < EM> “ ** * ** * * in if condition 的 * ** * ** * **** ” “validate_address_and_ip” 地理编码API响应速度不够快(使用Geocoder.configure(:timeout =&gt; ...)来设置限制)。 “ip_based_lat_lng =” []
为什么多次调用该方法?谁能告诉我这个问题