【发布时间】:2015-01-10 02:40:36
【问题描述】:
我正在使用Ruby Geocoder gem 同时执行正向和反向地理编码,但遇到了一些问题。我有一个具有经度和纬度字段以及地址字段的位置模型。在控制器中,我允许用户以两种不同的方式创建位置,第一种是通过提供地址并让 Geocoder 计算出经度和纬度,第二种是通过提供坐标并让 Geocoder 确定地址。下面是执行这些任务的 Locations 模型的代码:
class Location < ActiveRecord::Base
validates :name, :presence =>true
geocoded_by :address
reverse_geocoded_by :latitude, :longitude
after_validation :geocode, :reverse_geocode
end
此代码直接取自 Ruby Geocoder gem 网站,但效果不佳。当我使用地址创建位置时,它似乎仍在执行 reverse_geocode。这会从原始地址生成经度和纬度,然后重新生成通常不正确的地址。我对 Ruby on Rails 还很陌生,想知道是否有更好的方法来做到这一点。也许有一种方法可以使用after_validation 回调,并且有条件仅在提供地址时进行地理编码,而在提供坐标时仅进行反向地理编码?感谢您的帮助。
【问题讨论】:
-
我添加了一个答案,但它是错误的。我会考虑一下。要记住的一个问题是,无论何时验证资源,都会调用
after_validation,而不管更改了什么属性。您可以通过条件来克服这个问题,但我会尝试想一个好的解决方案。 -
感谢期待看到它@settheline
-
这个 railscasts 视频解决了所有属性更新的问题。 railscasts.com/episodes/109-tracking-attribute-changes
标签: ruby-on-rails ruby google-maps geocoding reverse-geocoding