我想要2地址,這是在1形式要求。地理編碼2地址與地理編碼器寶石
<%= f.input :kotadres %>
<%= f.input :location %>
他們都與谷歌自動完成這樣的工作:
<script>
var input = document.getElementById('student_location');
var autocomplete = new google.maps.places.Autocomplete(input,{componentRestrictions: {country:'be'}});
google.maps.event.addListener(autocomplete, 'place_changed', function(){
var place = autocomplete.getPlace();
})
</script>
<script>
var input = document.getElementById('student_kotadres');
var autocomplete = new google.maps.places.Autocomplete(input,{componentRestrictions: {country:'be'}});
google.maps.event.addListener(autocomplete, 'place_changed', function(){
var place = autocomplete.getPlace();
})
</script>
這工作完全正常,因爲這兩個地址存儲在數據庫中。
現在我想要在我的數據庫中對這兩個地址進行地理編碼。它已經工作了50%,因爲由於某種原因,它總是將地理編碼:kotadres放到緯度和經度列中,但我不知道爲什麼它僅對該屬性進行地理編碼,而不是對location屬性進行地理編碼。
這是我的學生表:
create_table "students", force: :cascade do |t|
t.string "location"
t.float "latitude"
t.float "longitude"
t.string "kotadres"
end
我知道我必須建立2條新的列來存儲2個新的緯度和經度值:位置,但我想知道如何做到這一點。
基本上我想明白爲什麼它只geocodes:kotadres屬性而不是:location屬性。我嘗試了以下幾件事:
- 開關等兩個輸入字段的形式(結果:只有:kotadres被地理編碼)
- 刪除:kotadres輸入字段(結果:位置不會被地理編碼)
我的學生模型是這樣的:
geocoded_by :location
after_validation :geocode, if: :location_changed?
geocoded_by :kotadres
after_validation :geocode, if: :kotadres_changed?
因此,如果有人知道如何進行地址解析這兩個地址,或者如果有人知道爲什麼它總是在地理編碼:kotadres屬性,我高興地知道答案。
你應該認真考慮使用一個獨立的地址模型,並建立一個一對多的關係。你目前的問題也是因爲你將所有東西都變成了一個單一的模型。 – max