我已经注意到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 方法。它的灵活性非常易于使用,但是同行是不可能知道该地址是否真的更改。

这就是为什么我给编码人员提供两个不同的机会来满足他们的需求:

  1. 如果您不关心性能,则每次保存模型时都可以刷新坐标(即使地址没有更改)。看这里: https://github.com/apneadiving/google-maps-for-rails/wiki/model-customization.

改变 :check_processfalse:

    acts_as_gmappable :check_process => false

2.如果您想完全控制该过程,请设置 gmaps 布尔值 false 只要您希望更新坐标。它可能是您的表格中的隐藏字段,也可能是模型中的钩子检查必要的字段。

其他提示

这是解决问题的经济方式:

  1. 将列添加到模型 - 例如last_g4r_address
  2. 添加一个fortre_validation函数:

    def check_g4r_address self.gmaps = false如果last_g4r_address!= gmaps4rails_address self.last_g4r_address = gmaps_address4rails_address end

这样,仅当地址更改时,才会更新地理编码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top