Google Maps and Rails - 如何从Ruby模型构建位置数据

时间:2014-01-04 16:18:48

标签: ruby-on-rails ruby google-maps google-maps-api-3 ruby-on-rails-4

我正在尝试使用没有gmaps4rails gem的Google Maps API。

这是一个普通的应用程序,其中模型的每个实例都是一个标记,我希望每个标记都有自己的信息窗口。

在这部分代码中存在问题:

var locations = [];
<% @listings.each do |l| %>
  locations.push([<%=raw l.latitude%>, <%=raw l.longitude %>]);
<% end %>

代码按原样运行,但是当我尝试调用第三个不是数字的对象(比如说<%=raw l.title %>)时,地图就不会加载。此外,Ruby中的任何文本都不会加载 - 例如<%=raw "text" %><%= "text" %>,而<%= 2 %>确实有效。

我怎样才能超越这个问题并调用ruby模型来构建一个infowindow?是JSON吗?如果是这样,我会用它吗?

提前致谢, 蒂亚戈

地图部分:

<script type="text/javascript">

      function initialize() {
        var mapOptions = {
          center: new google.maps.LatLng(1.3, 103.85),
          zoom: 12,
          disableDefaultUI: true,
          zoomControl:true
        };

        var locations = [];
        <% @listings.each do |l| %>
           locations.push([<%=raw l.latitude%>, <%=raw l.longitude %>]);
        <% end %>

        var map = new google.maps.Map(document.getElementById("index-map-canvas"),
            mapOptions);

        var infowindow = new google.maps.InfoWindow();      

        var marker, i;

        for (i = 0; i < locations.length; i++) {  
          marker = new google.maps.Marker({
            position: new google.maps.LatLng(locations[i][0], locations[i][1]),
            map: map
          });


          google.maps.event.addListener(marker, 'click', (function(marker, i) {
            return function() {
              infowindow.setContent("<div>"+locations[i][2]+"</div>");
              infowindow.open(map, marker);
            }
          })(marker, i));

        };

      }
      google.maps.event.addDomListener(window, 'load', initialize);
    </script>

控制器:

def index
    @q = Listing.search(params[:q])
    @listings = @q.result(distinct: true).paginate(:page => params[:page], :per_page => 10)
  end

1 个答案:

答案 0 :(得分:1)

替换:

    var locations = [];
    <% @listings.each do |l| %>
       locations.push([<%=raw l.latitude%>, <%=raw l.longitude %>]);
    <% end %>

使用:

    var locations = <%= raw @listings.to_json %>;