相同的谷歌地图代码适用于一个页面,而不是另一个

时间:2017-06-11 13:18:16

标签: ruby-on-rails google-maps gmaps4rails

我正在使用Rails和Gmaps4rails gem。我在控制器中添加了两个动作的地图。这是两者的代码。

def index
@clubs = policy_scope(Club)
@date = params[:date] || Date.today

@hash = Gmaps4rails.build_markers(@clubs) do |club, marker|
  marker.lat club.latitude
  marker.lng club.longitude
  # marker.infowindow render_to_string(partial: "/clubs/map_box", locals: { club: club })
end
end

def show_map
@club = Club.find(params[:id])
authorize @club

@hash = Gmaps4rails.build_markers(@club) do |club, marker|
  marker.lat club.latitude
  marker.lng club.longitude
  # marker.infowindow render_to_string(partial: "/clubs/map_box", locals: { club: club })
end
end

这是我的视图代码,它被添加到具有部分页面的两个页面中。

<div id="map" style="width: 50%; height: 400px;"></div>

<% content_for(:after_js) do %>
<%= javascript_tag do %>
$(document).ready(function() {
  var handler = Gmaps.build('Google');
  handler.buildMap({ internal: { id: 'map' } }, function() {
    markers = handler.addMarkers(<%= raw @hash.to_json %>);
    handler.bounds.extendWith(markers);
    handler.fitMapToBounds();
    if (markers.length == 0) {
      handler.getMap().setZoom(2);
    } else if (markers.length == 1) {
      handler.getMap().setZoom(14);
    }
  });
});
  

问题是地图出现在我的索引页面上,但不在我的show_map页面上。我们的想法是让show_map只显示一个俱乐部的标记。然而奇怪的是,我做的事情并不重要,我无法在show_map上显示地图。

即使我在索引方法和show_map方法中有完全相同的代码(我试图使两个方法都相同以确定它是否有效),它仍然无法在show_map视图中工作。

我在show_map视图页面中收到此错误:未捕获TypeError:无法读取属性&#39; lat&#39;未定义的。

有没有人遇到过同样的问题?

2 个答案:

答案 0 :(得分:0)

我认为你必须给这个函数一个数组:

Gmaps4rails.build_markers(@club)

试试:

Gmaps4rails.build_markers([@club])

to show_map action

答案 1 :(得分:0)

如果有人遇到同样的问题,我最后继续前进并将其留待以后。我添加了API密钥以推向生产,不知何故,一旦我这样做,谷歌地图开始在每个页面上工作,而不仅仅是索引。希望这可以帮助。