我正在使用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;未定义的。
有没有人遇到过同样的问题?
答案 0 :(得分:0)
我认为你必须给这个函数一个数组:
Gmaps4rails.build_markers(@club)
试试:
Gmaps4rails.build_markers([@club])
to show_map action
答案 1 :(得分:0)
如果有人遇到同样的问题,我最后继续前进并将其留待以后。我添加了API密钥以推向生产,不知何故,一旦我这样做,谷歌地图开始在每个页面上工作,而不仅仅是索引。希望这可以帮助。