El ejemplo es el siguiente:
Genere un nuevo proyecto llamdo gmapsRails
Dentro de la carpeta del proyecto modifique el archivo Gemfile agregando las siguientes líneas
gem 'gmaps4rails', '~> 2.0.4'
gem 'geokit-rails'
y luego ejecute
Dado que en mi versión de rails no existe la gema geokit-rails (mi versión es la 4.0.1) prosegui con lo siguiente:
rake db:create
rails g scaffold Direcciones address:string latitude:float longitude;float gmaps:boolean
rake db:migrate
con lo cual genero mi base de datos, el cntrolador y las acciones CRUD para la tabla correspondiente (Direccione)
Lo siguiente es
rails g gmaps4rails:install
En este punto, si les marca un error al aplicar el comando anterior, por no conecer la accion generate para la gema
lo resolvemos copiando los archivos que necesitamos de la siguiente manera
rails g gmaps4rails:copy_js
rails g gmaps4rails:copy_coffee
agregamos el archivo underscore.js (el cual les adjunto y que pueden obtener de la págna: underscorejs.org/) en la carpeta app/assets/javascripts
y agregamos las siguientes lineas al archivo application.js en la misma carpeta
//= require underscore
//= require gmaps/google
Agregamos las siguientes lineas en nuestro archivo app/views/layouts/application.html.erb
<!-- aqui va el resto del código del archivo -->
<%= yield %>
<%= yield :scripts %>
<!-- Bibliotecas específicas de google maps que usaremos, si van a trabajar con direcciones les recomiendo cargar google maps geocoder -->
<script src="//maps.google.com/maps/api/js?v=3.13&sensor=false&libraries=geometry" type="text/javascript">
</script>
<script src='//google-maps-utility-library-v3.googlecode.com/svn/tags/markerclustererplus/2.0.14/src/markerclusterer_packed.js' type='text/javascript'>
</script>
<!-- mediante este script agregaremos los markers que vamos a procesar-->
<script>
handler = Gmaps.build('Google');
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
//marker por defecto, en caso de que no agreguems uno nosotros
markers = handler.addMarkers([
{
"lat": 19.323734,
"lng": -99.178971,
"infowindow": "Zocalo capitalino, Marca por defecto"
}]);
// los markers que agregaremos lo haremos mediante esta línea
markers = handler.addMarkers(<%=raw @hash.to_json %>);
handler.bounds.extendWith(markers);
handler.fitMapToBounds();
});
</script>
</body>
Ahora, dentro de direcciones_controller.rb modificamos el método index:
def index
#se obtiene todas las direcciones
#esta parte del código rails previamente la generó con el scaffold
@direcciones = Direccione.all
#obtenemos auellos registros donde gmaps=true
#en clase les explique por que estan comentados
#al descomentar estas lineas hay que comentar el siguiente @hash
#@hash = Gmaps4rails.build_markers(
# @direcciones.where(:gmaps=> true)) do |dir, marker|
#procesamos todos los registros.
@hash = Gmaps4rails.build_markers(@direcciones) do |dir, marker|
#agregamos latitud, longitud, y descripción
marker.lat dir.latitude
marker.lng dir.longitude
marker.infowindow dir.address
end
end
por último en app/views/direcciones/index.html.erb agregamos al final lo siguiente
<div style='width: 800px;'>
<div id="map" style='width: 800px; height: 600px;'></div>
</div>
después de todo lo anterior, ejecuten en la terminal
y, mediante un navegador, ingresen a
localhost:3000/Direcciones
referencia principal:
podrian checar también