Я бы сказал, прикрути плагины и просто используй JavaScript из Google Maps API v3 ... это действительно не так уж много кода, а G имеет очень точный геокодер.Просто создайте в своем представлении массив предприятий js и используйте несколько js для загрузки карты и маркеров.
НЕПРОВЕРЕННЫЙ код, но он должен быть довольно близок:
<script type="text/javascript">
addresses = [];
<% @businessses.each do |biz| %>
addresses.push('<%=biz.address%>');
<% end %>
function renderYoMap(addresses){
var gmapOptions = {
zoom: 12,
center: new google.maps.LatLng(38,-97), //near the middle of the US
mapTypeId: google.maps.MapTypeId.ROADMAP
};
// initialize the map with your options
gmap = new google.maps.Map(document.getElementById("map_canvas"),gmapOptions);
// probably want to recenter on the first marker, so lets use a flag
recentered = false;
//iterate through your addresses
for (i in addresses) {
address = addresses[i];
geocoder = new google.maps.Geocoder();
//geocode it to get marker position
geocoder.geocode( { 'address': address }, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
lat = results[0].geometry.location.lat();
lng = results[0].geometry.location.lng();
position = new google.maps.LatLng(lat,lng);
markerOptions = {
map: gmap,
position: position
};
//create your marker on the map
new google.maps.Marker(markerOptions);
//recenter that thang if it hasnt been already
if (!recentered){
gmap.setCenter(position);
recentered = true;
}
}
}
}
renderYoMap(businesses);
</script>
Конечно, выможет стать намного интереснее, но это должно дать вам базовую функциональность, которую вы ищете.Лимит геокодера Google составляет 1000 в день, но это на стороне клиента, поэтому проблем не должно быть.