Rails地理编码只允许一个属性?

时间:2013-06-04 23:04:12

标签: ruby-on-rails-3 maps location geocoding

我正在尝试获取两个不同值的纬度和经度值。这些是在我的里程模型中的startend属性中设置的。

geocoded_by :end, :latitude  => :latitude, :longitude => :longitude
geocoded_by :start, :latitude  => :start_lat, :longitude => :start_lon

我的里程模型中有以下属性:

start
start_lat
start_long
end
latitude
longitude

根据里程模型顶部的geocoded_by行,仅对其中一个属性进行地理编码。有没有办法让地理编码器gem处理这两个属性?

2 个答案:

答案 0 :(得分:5)

简短的回答是否定的。

但是不难推出自己的解决方案。基本上geocoded_by:设置一种简单的方法,使用少量选项(lat / long列名等)从回调对地址lat / long进行地理编码。

有一种用于查找地址的lat / lng的实用方法:

Geocoder.coordinates(the_start_address)
     => [42.700149, -74.922767]

所以你可以使用geocoded_by:方法来处理你的例子中的结束lat / long,然后做类似的事情

before_save :geocode_the_start_address

def geocode_the_start_address
  coords = Geocoder.coordinates(self.start)
  self.start_lat = coords[0]
  self.start_long = coords[1]
end

老实说,我自己更加一致地命名--start_address,end_address,start_lat,start_long等。我还使用自定义方法对起始地址和结束地址进行地理编码,而不是geocoded_by,因此代码更加一致。

答案 1 :(得分:1)

我同意约翰保罗,但我会在after_save中这样做 - 所以,基本上,你的Milage模型会在创建的起始地址上执行地理编码,然后在创建之后(例如,已在起始地址上执行了地理编码,并且您具有有效的起始地址),使用单独的回调对结束地址执行地理编码。