3

我注意到使用 Google Maps For Rails gems 可以很好地工作,当我更改模型字段中的地址时,即使地址字段已更新并保存,坐标也不会自动更新。我创建了一个调用地理编码的 before_save 方法。

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

这可行,但我想知道是否有必要,因为它似乎应该在 gem 中自动执行。我错过了什么吗?

谢谢...

PS geocode 返回一个数组,所以我只做了第一个(最好的)猜测

4

2 回答 2

8

由于该方法,坐标的刷新是一个棘手的过程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它可能是表单中的隐藏字段,也可能是模型中检查必要字段的钩子。

于 2011-04-27T19:04:59.547 回答
0

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

  1. 向模型添加一列 - 例如 last_g4r_address
  2. 添加一个 before_validation 函数:

    def check_g4r_address self.gmaps = false if last_g4r_address != gmaps4rails_address self.last_g4r_address = gmaps4rails_address end

这样,只有在地址更改时才会更新地理编码。

于 2012-05-13T19:07:08.453 回答