gpt4 book ai didi

ruby-on-rails - gmaps4rails gem : to_gmaps4rails method undefined

转载 作者:行者123 更新时间:2023-12-04 06:15:48 25 4
gpt4 key购买 nike

我正在尝试使用 gmaps4rails(即使用 AJAX 回调)动态更新谷歌地图上的标记。我发现 gmaps4rails 的文档非常分散且不清楚。

我已经成功地使用 build_markers 方法在 map 上显示标记(根据视频教程 v2)。

我的 Controller 代码:

# GET /telemetry_recordings
def index

@telemetry_recordings = TelemetryRecording.all
@hash = Gmaps4rails.build_markers(@telemetry_recordings) do |telemetry_recording, marker|
marker.lat telemetry_recording.latitude
marker.lng telemetry_recording.longitude
marker.title telemetry_recording.delivery_unit.driver.full_name
marker.infowindow telemetry_recording.delivery_unit.driver.full_name
end
end

我的查看代码:

<script type="text/javascript">
handler = Gmaps.build('Google');
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
markers = handler.addMarkers(<%=raw @hash.to_json %>);
handler.bounds.extendWith(markers);
handler.fitMapToBounds();
});
</script>

现在,为了实现动态更新,我已将以下脚本添加到我的 View 中:

<script type="text/javascript">
jQuery(function($) {
$('body').on('click', '#replace_markers', function(){
$.getJSON("/telemetry_recordings", function(data){
Gmaps.map.replaceMarkers(data);
});
});
});
</script>

还有一个按钮:

<button id="replace_markers">Refresh</button>

并且,我已将以下代码添加到我的 Controller 中:

respond_to :json, :html

# GET /telemetry_recordings
def index

@json = TelemetryRecording.all.to_gmaps4rails
respond_with @json

end

注意:TelemetryRecording类有3个属性:纬度(float)、经度(float)和location_time(DateTime)

这会导致以下错误:

undefined method `to_gmaps4rails' for #<TelemetryRecording::ActiveRecord_Relation:0x55dee78>

根据文档,我安装了 gmaps4rails gem,添加了 //= require underscore//= require gmaps/google 到我的 application.js 文件,并在我的 View 中包含以下脚本:

<script src="//google-maps-utility-library-v3.googlecode.com/svn/tags/markerclustererplus/2.0.14/src/markerclusterer_packed.js" type="text/javascript"></script>
<script src="//maps.google.com/maps/api/js?v=3.13&sensor=false&libraries=geometry" type="text/javascript"></script>

我在这里正确使用 to_gmaps4rails 吗? (我的理解是它将具有纬度/经度属性的对象转换为标记数组,例如 [{"lat":"x", "lng":"y"}, {"lat":"x", "lng":"y"}]。为什么是未定义的?

最佳答案

您正在使用 v1.x 和 2.x 中的代码。

to_gmaps4rails 已从代码库中删除。所以你的第一枪没问题:

def index
@hash = Gmaps4rails.build_markers(TelemetryRecording.all) do |telemetry_recording, marker|
marker.lat telemetry_recording.latitude
marker.lng telemetry_recording.longitude
marker.title telemetry_recording.delivery_unit.driver.full_name
marker.infowindow telemetry_recording.delivery_unit.driver.full_name
end
respond_with @hash
end

在js中

<script type="text/javascript">
handler = Gmaps.build('Google');
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
var markers = handler.addMarkers(<%=raw @hash.to_json %>);
handler.bounds.extendWith(markers);
handler.fitMapToBounds();

$('body').on('click', '#replace_markers', function(){
$.getJSON("/telemetry_recordings", function(newMarkers){
handler.removeMarkers(markers); // to remove previous markers
markers = handler.addMarkers(newMarkers);
});
});
});
});
</script>

关于ruby-on-rails - gmaps4rails gem : to_gmaps4rails method undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25777619/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com