2016-06-01 65 views
0

我努力让我的谷歌地图在我的Rails应用程序中工作。Rails 4 - Gmaps4Rails - 地图不会渲染

这一切工作正常 - 我继续工作下一个功能,并已回来找到它不再有效。

我有模型地址,配置文件和项目。我在每个配置文件和项目中使用地址在每种情况下,地图都不显示。

模型之间的关联是:

地址

belongs_to :addressable, :polymorphic => true 

档案

has_many :addresses, as: :addressable 
    accepts_nested_attributes_for :addresses, reject_if: :all_blank, allow_destroy: true 

项目

has_many :addresses, as: :addressable 
    accepts_nested_attributes_for :addresses, reject_if: :all_blank, allow_destroy: true 

控制器显示功能:

地址

def create 
    @address = Address.new(address_params) 
    authorize @address 

    respond_to do |format| 
     if @address.save 
     format.html { redirect_to @address, notice: 'Address was successfully created.' } 
     format.json { render :show, status: :created, location: @address } 
     else 
     format.html { render :new } 
     format.json { render json: @address.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

档案

def show 
    # debugger 
    @profile = Profile.includes(:industries).find(params[:id]) 
    # @organisation = Organisation.find(params[:organisation_id]) 
    # @profiles = @organisation.profiles 
    @addresses = @profile.addresses 

     @hash = Gmaps4rails.build_markers(@addresses) do |address, marker| 
     marker.lat address.latitude 
     marker.lng address.longitude 
     marker.infowindow address.full_address 
     end 
    end 

项目

def show 
    @invite = Invite.new 
    @project = Project.find(params[:id]) 
    @addresses = @project.addresses 

     @hash = Gmaps4rails.build_markers(@addresses) do |address, marker| 
     marker.lat address.latitude 
     marker.lng address.longitude 
     marker.infowindow address.full_address 

     end 

在我的个人资料显示,我有:

<%= render partial: "profiles/main_address" %> 

在配置文件/主地址,我有:

<script src="//maps.google.com/maps/api/js?v=3.18&sensor=false&client=&key=&libraries=geometry&language=&hl=&region="></script> 
<script src="//google-maps-utility-library-v3.googlecode.com/svn/tags/markerclustererplus/2.0.14/src/markerclusterer_packed.js"></script> 
<script src='//google-maps-utility-library-v3.googlecode.com/svn/tags/infobox/1.1.9/src/infobox_packed.js' type='text/javascript'></script> <!-- only if you need custom infoboxes --> 

<div style='width: 800px;'> 
    <div id="map" style='width: 800px; height: 400px;'></div> 
</div> 

<script> 
handler = Gmaps.build('Google'); 
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){ 
    markers = handler.addMarkers(<%=raw @hash.to_json %>); 
    handler.bounds.extendWith(markers); 
    handler.fitMapToBounds(); 
    handler.getMap().setZoom(8); 
}); 
</script> 

我在我的项目文件夹相同的过程显示该项目的地址。

在我的宝石文件我有:

gem 'google-api-client', '~> 0.7.1', require: 'google/api_client' 
gem 'gmaps4rails', '~> 2.1', '>= 2.1.2' 
gem 'underscore-rails' 

我想不通,为什么我只是得到一个空白,而不是显示地址的地图。

在我的控制台检查,我可以看到一个红色的错误,上面写着:

primitives.self-5b8a3a6….js?body=1:16 Uncaught ReferenceError: MarkerClusterer is not definedGmaps.Google.Primitives @ primitives.self-5b8a3a6….js?body=1:16Gmaps.Objects.Handler.Handler.setPrimitives @ handler.self-2f220ca….js?body=1:122Handler @ handler.self-2f220ca….js?body=1:8Gmaps.build @ base.self-8dd1d1a….js?body=1:9(anonymous function) @ 14:760 

谷歌搜索的错误,未捕获的ReferenceError:未定义MarkerClusterer,创业板制造商建议在运行:

rails generate gmaps4rails:install 

当我尝试时,我得到一个错误,说:

Running via Spring preloader in process 93390 
Could not find generator 'gmaps4rails:install'. Maybe you meant 'paper_trail:install', 'gmaps4rails:copy_js' or 'responders:install' 

我的控制台检查器也显示了许多有关gmaps警告,如:

Google Maps API warning: NoApiKeys https://developers.google.com/maps/documentation/javascript/error-messages#no-api-keys 
util.js:220 Google Maps API warning: RetiredVersion https://developers.google.com/maps/documentation/javascript/error-messages#retired-version 
util.js:220 Google Maps API warning: SensorNotRequired https://developers.google.com/maps/documentation/javascript/error-messages#sensor-not-required 
util.js:220 Google Maps API warning: InvalidClientId https://developers.google.com/maps/documentation/javascript/error-messages#invalid-client-id 
util.js:220 Google Maps API warning: InvalidKey https://developers.google.com/maps/documentation/javascript/error-messages#invalid-key 
14:1 Failed to decode downloaded font: http://localhost:3000/assets/flaticon-080b09d3f53cb13c2f9d9a4c53ad7a71206bd8e2390c3e18d2b42ce9388a49a6.woff 

我有一个API密钥 - 我只是不知道在哪里把它放在我的代码。

任何人都可以看到如何提供帮助。如果我没有解决Gmaps的警告问题,我不介意,但我确实想回到地图显示时的位置。

回答

0

所以你的问题是与这两条线:

<script src="//google-maps-utility-library-v3.googlecode.com/svn/tags/markerclustererplus/2.0.14/src/markerclusterer_packed.js"></script> 
<script src='//google-maps-utility-library-v3.googlecode.com/svn/tags/infobox/1.1.9/src/infobox_packed.js' type='text/javascript'></script> 

有人引用markerclustererinfobox库直接从谷歌SVN(这是一个不好的做法)和库前被转移到Github上几个星期。

您可以从here下载infobox库到您的项目,并引用infobox_packed.js文件:

<script src='path/to/infobox_packed.js' type='text/javascript'></script> 

同样的,你也可以下载标记聚类器库here。小心:对于标记群集,您将需要srcimages

请看这SO question and answers,也this one和也许this one。我强烈建议你阅读所有问题的答案,因为其中一些答案包含不好的解决方案(来自新的github位置的参考库,而不是将它们下载到你的项目,并从那里引用它们是不好的做法)

+0

嗨Matej ,谢谢你。你的意思是克隆回购并在项目中引用它们的不良做法,或者引用github文件是不好的做法。其他帖子表明不好的做法依赖于github参考。 – Mel

+0

是的。你不应该从github引用。克隆回购和引用它们是绝对没问题的。这是我连接其他答案的主要原因,我很高兴你明白我的意思:) –