Rails将现有模型地理编码到交互视图

时间:2014-11-30 04:17:12

标签: ruby-on-rails google-maps geocoding gmaps4rails rails-geocoder

我在理解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

0 个答案:

没有答案