我在理解Geocoding如何与Rails一起工作时遇到了一些严峻的挑战,而我似乎无法在这个特定情况下找到答案。
我正在处理一个包含事件的应用,每个事件都有一个用户(通过设计)将作为地址输入的位置(字段:地址+城市+州)。我的目标是在用户提交表单后对该地址进行地理编码,然后一旦有人进入“事件”页面,则使用Events#show controller在交互式Google地图上显示该地址。
我最初的想法是在表单提交时使用Geocoder gem对地址进行地理编码,然后将新创建的经度和纬度从事件模型通过gmaps4rails gem传递给Google API,然后让它发回地图。到目前为止没有骰子。
这是我的相关代码,我不知道出了什么问题。 " acts_as_gmappable"给我错误,我无法生成gmaps4rails:install"在终端中,我确实将GMAP布尔值添加到事件模式中无效。我一开始尝试使用Geocoder完成所有操作,而且凭借对文档的理解,这几乎是不可能的。任何帮助将不胜感激。
的Gemfile
gem 'geocoder'
gem 'gmaps4rails'
Event.rb
class Event < ActiveRecord::Base
acts_as_gmappable
belongs_to :user
validates :location, :address, :city, :state, :latitude, :longitude, presence: true
geocoded_by :full_address
after_validation :geocode, if: ->(obj){ obj.address.present? and obj.address_changed? }
def full_address
[street, city, state].compact.join(', ')
end
end
Events_Controller.rb
def show
@json = Event.to_gmaps4rails
respond_to do |format|
format.html # show.html.erb
format.json { render json: @event }
end
end
Event Show.HTML.erb
<div id="map-container">
<div id="map">
<%= gmaps4rails(@json) %>
</div>
</div>
<script type="text/javascript">
handler = Gmaps.build('Google');
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
markers = handler.addMarkers(<%=raw @hash.to_json %>);
handler.bounds.extendWith(markers);
handler.fitMapToBounds();
});
</script>
Initializer Geocoder.rb
Geocoder.configure(
:timeout => 3, # geocoding service timeout (secs)
:lookup => :google, # name of geocoding service (symbol)
:api_key => "xxxxxxx",
:cache_prefix => "geocoder:", # prefix (string) to use for all cache keys