2013-06-04 25 views
1

我想獲取兩個不同值的緯度和經度值。這些設置在我的里程模型中的屬性startend中。Rails地理編碼只允許一個屬性?

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處理這兩個屬性?

回答

5

簡短的回答是否定的。

但不難推出自己的解決方案。基本上geocoded_by:設置了一個簡單的方法,用一些選項(緯度/長列名等)從回調中對地址lat/long進行地理編碼。

有用於查找LAT的地址/ LNG實用方法:

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

,所以你可以使用geocoded_by:方法來處理結束緯度/長在你的例子,然後像做

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

我同意約翰保羅,但我會在after_save - 所以,基本上,你的Milage模型執行地址編碼創建的起始地址,然後創建後發生(例如地理編碼已執行在起始地址上,並且您有一個有效的起始地址),請使用單獨的回調對結束地址執行地址解析。