为gmaps4rails预处理lat / long时的错误

时间:2013-07-05 06:43:09

标签: ruby-on-rails gmaps4rails

我有一定数量的用户没有纬度或经度。添加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

这让我的佣金破了,所以我想知道我怎样才能为那些正确的地址设置纬度和经度,然后忽略(不设置lat / long)那些返回上述错误的地址?

编辑:

我试过这样做:

    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

但没有运气。我无法捕获异常并转到循环中的下一个。 感谢

1 个答案:

答案 0 :(得分: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