使用Google-Maps-For-Rails更新更改模型地址的坐标
-
24-10-2019 - |
题
我已经注意到Rails Gems的Google Maps,否则可以完美地工作,当我更改模型字段中的地址时,即使更新和保存地址字段,坐标也不会自动更新。我创建了一个trefor_save方法,该方法调用GeoCode。
before_save :update_location_coordinates # in model being mapped
protected
def update_location_coordinates
place = Gmaps4rails.geocode(gmaps4rails_address).first
self.longitude, self.latitude = place[:lng], place[:lat] unless place.empty?
rescue
nil
end
这起作用,但我想知道这是否有必要,因为似乎在宝石中应该是自动的。我想念什么吗?
谢谢...
PS Geocode返回一个阵列,所以我只是接受了第一个(最好的)猜测
解决方案
坐标的刷新是一个棘手的过程 gmaps4rails_address
方法。它的灵活性非常易于使用,但是同行是不可能知道该地址是否真的更改。
这就是为什么我给编码人员提供两个不同的机会来满足他们的需求:
- 如果您不关心性能,则每次保存模型时都可以刷新坐标(即使地址没有更改)。看这里: https://github.com/apneadiving/google-maps-for-rails/wiki/model-customization.
改变 :check_process
至 false
:
acts_as_gmappable :check_process => false
2.如果您想完全控制该过程,请设置 gmaps
布尔值 false
只要您希望更新坐标。它可能是您的表格中的隐藏字段,也可能是模型中的钩子检查必要的字段。
其他提示
这是解决问题的经济方式:
- 将列添加到模型 - 例如last_g4r_address
添加一个fortre_validation函数:
def check_g4r_address self.gmaps = false如果last_g4r_address!= gmaps4rails_address self.last_g4r_address = gmaps_address4rails_address end
这样,仅当地址更改时,才会更新地理编码。
不隶属于 StackOverflow