2011-04-27 67 views
3

我注意到了Google Maps for Rails gems,当我更改模型字段中的地址时,坐标不会自动更新,地址栏被更新并保存。我创建了一个调用geocode的before_save方法。使用Google-Maps-For-Rails更新模型地址的坐标

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地理编码,所以我只是把第一个(最好的)猜测

回答

7

坐标的刷新是因为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。它可能是您窗体中的一个隐藏字段,或者您的模型中的钩子检查必要的字段。

+0

太棒了!谢谢。现在,我知道该gmaps字段的用途。我想我错过了它的文档。 – 2011-04-28 13:14:30

0

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

  1. 一列添加到模型 - 如last_g4r_address
  2. 添加before_validation功能:

    高清check_g4r_address self.gmaps = FALSE如果last_g4r_address!= gmaps4rails_address self.last_g4r_address = gmaps4rails_address end

这种方式仅在地址更改时才更新地理编码。

+0

这里更经济:https://github.com/apneadiving/Google-Maps-for-Rails/issues/208 – apneadiving 2012-05-13 20:41:00