Rails 4 - Gmaps4Rails - el mapa no se procesará
Estoy luchando para que mis mapas de Google funcionen en mi aplicación Rails.
Todo funcionaba bien: pasé a trabajar en la siguiente función y volví para encontrar que ya no funciona.
Tengo modelos para dirección, perfil y proyecto. Utilizo la dirección en cada perfil y proyecto En cada caso, el mapa no se muestra.
Las asociaciones entre modelos son:
Habla a
belongs_to :addressable, :polymorphic => true
Perfil
has_many :addresses, as: :addressable
accepts_nested_attributes_for :addresses, reject_if: :all_blank, allow_destroy: true
Proyecto
has_many :addresses, as: :addressable
accepts_nested_attributes_for :addresses, reject_if: :all_blank, allow_destroy: true
Las funciones de mostrar del controlador son:
Habla a
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
Perfil
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
Proyecto
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
En mi programa de perfiles, tengo:
<%= render partial: "profiles/main_address" %>
En perfiles / dirección principal, tengo:
<script src="//maps.google.com/maps/api/js?v=3.18&sensor=false&client=&key=&libraries=geometry&language=&hl=®ion="></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>
Tengo el mismo proceso en mi carpeta de proyectos para mostrar la dirección del proyecto.
En mi archivo de gemas tengo:
gem 'google-api-client', '~> 0.7.1', require: 'google/api_client'
gem 'gmaps4rails', '~> 2.1', '>= 2.1.2'
gem 'underscore-rails'
No puedo entender por qué solo obtengo un espacio en blanco en lugar de un mapa que muestra la dirección.
En mi inspector de consola, puedo ver un error rojo que dice:
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
Googleando el error, Error de referencia no capturado: MarkerClusterer no está definido, el fabricante de gemas sugiere ejecutar:
rails generate gmaps4rails:install
Cuando intento eso, aparece un error que dice:
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'
El inspector de mi consola también muestra una serie de advertencias relacionadas con gmaps, como:
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
Tengo una clave de API, simplemente no sé dónde ponerla en mi código.
¿Alguien puede ver cómo ayudar? No me importa si no resuelvo los problemas de advertencia con Gmaps, pero quiero volver a donde estaba cuando se mostraba el mapa.