我正在使用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地图出现。
即使我在 index 方法和 show_map 方法中有完全相同的代码(我试图使两个方法相同以查看它是否有效(,它仍然无法在show_map视图中工作。
我在show_map视图页面中收到此错误:未捕获的类型错误:无法读取未定义的属性"lat"。
有没有人遇到过同样的问题?
我认为你必须给这个函数一个数组:
Gmaps4rails.build_markers(@club)
试试:
Gmaps4rails.build_markers([@club])
show_map操作
如果有人遇到同样的问题,我最终会继续前进并留待以后使用。我添加了 API 密钥以推送到生产环境,不知何故,一旦我这样做了,Google 地图就开始在每个页面上工作,而不仅仅是索引。希望这有帮助。