在一个模型中对多个地址进行地理编码

我正在尝试使用地理编码器在模型中对2个地址进行地理编码,但我无法按照我的意愿使用gem。 这是我应用于我的模型的代码:

class Sender  :latitude1, :longitude => :longitude1 geocoded_by :destination_address, :latitude2 => :latitude2, :longitude2 => :longitude2 def update_coordinates geocode [latitude1, longitude1, latitude2, longitude2] end after_validation :geocode 

以下是views / senders / show.html.erb的代码:

      

结果:35.6894875 139.6917064 – 是不是应该寄回2个地址信息?

这是我的js:

  function initialize() { var source = new google.maps.LatLng(, ); var dest = new google.maps.LatLng(, ); var mapOptions = { center: source, zoom: 8 } var mapOptions2 = { center: dest, zoom: 8 } var map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions); var map2 = new google.maps.Map(document.getElementById('map_canvas2'), mapOptions2); var marker = new google.maps.Marker({ position:source, map: map }); var marker2 = new google.maps.Marker({ position:dest, map: map2 }); } google.maps.event.addDomListener(window, 'load', initialize);  

这里提到了问题和解决方案。

将以下before_save和相应的方法添加到模型中以解决问题。 不要忘记重复第二个位置(可能是目的地)的部分代码:

 before_save :geocode_endpoints private #To enable Geocoder to works with multiple locations def geocode_endpoints if from_changed? geocoded = Geocoder.search(loc1).first if geocoded self.latitude = geocoded.latitude self.longitude = geocoded.longitude end end # Repeat for destination if to_changed? geocoded = Geocoder.search(loc2).first if geocoded self.latitude2 = geocoded.latitude self.longitude2 = geocoded.longitude end end end 

改写

 def function ... end 

如:

 def update_coordinates geocode [latitude, longitude, latitude2, longitude2] end 

并且:

 geocoded_by :destination_address, :latitude => :latitude2, :longitude => :longitude2 

你也不需要:latitude => :lat, :longitude => :lon here:

 geocoded_by :source_address, ... 

最后,在validation记录后自动获取坐标。 所以你可以在没有update_coordinates (或你的版本中的function )的情况下做,并安排show action的视图,如下所示:

 <%= @sender.latitude %> <%= @sender.longitude %> <%= @sender.latitude2 %> <%= @sender.longitude2 %>