0

我有大量没有纬度或经度的用户。添加 gem 后,我想通过执行以下操作预处理纬度和经度字段:

User.all.each do |user|
  geo_data = Gmaps4rails.geocode(user.gmaps4rails_address)
  user.update_attributes(latitude: geo_data[0][:lat], longitude: geo_data[0][:lng])
  sleep(1)
end

但是这样做时,有时,当我的地址错误时,我会收到这样的消息:

The address you passed seems invalid, status was: ZERO_RESULTS.
Request was: http://maps.googleapis.com/maps/api/geocode/json?language=en&address=asdasdsa, mountain, US&sensor=false

这使我的耙子坏了,所以我想知道如何为那些正确的地址设置纬度和经度,而对于那些返回上述错误的地址则忽略(未设置纬度/经度)?

编辑:

我试图这样做:

    User.all.each do |user|
      begin
        geo_data = Gmaps4rails.geocode(user.gmaps4rails_address)
      rescue
        next
      end
      user.update_attributes(latitude: geo_data[0][:lat], longitude: geo_data[0][:lng])
      sleep(1)
    end

但没有运气。我无法捕捉到异常并进入循环中的下一个。谢谢

4

1 回答 1

0

尝试:

User.find_each do |user|
  begin
    geo_data = Gmaps4rails.geocode(user.gmaps4rails_address)
    user.update_attributes(latitude: geo_data[0][:lat], longitude: geo_data[0][:lng])
    sleep(1)
  rescue
    #just prevent loop from crash
  end
end
于 2013-07-05T07:15:47.013 回答