我想要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