首页 > 解决方案 > 如何迭代此 Ruby 代码以便在地图上动态显示标记?

问题描述

我正在构建一个商店定位器应用程序,我正在尝试使用代表数据库中商店的标记填充地图。我已经使用 Geocoder gem 将地址转换为纬度和经度,并且我正在使用 Leaflet.js 和 Leaflet-rails gem(基本上遵循本教程:https ://github.com/axyjo/leaflet-rails )。我已经能够使用以下代码使用标记显示地图:

<% @stores.each do |store| %>
    <h2><%= link_to store.name, store_path(store) + ': ' + store.address %></h2>
<% end %>

<%= link_to "Add Spaeti", new_store_path %>

<%= map(:center => {
    :latlng => [52.52004797921441, 12.4050235665359283],
    :zoom => 3
  },

  :markers => [
    {  
       :latlng => [ Store.last.latitude, Store.last.longitude ],
       :popup => Store.last.name
    }
  ]
) %>

我遇到的问题是让标记从我的数据库中的数据中动态显示。我对 Ruby 和 Rails 还比较陌生,所以事实证明这很困难。我应该使用 each 方法迭代 lat 和 lng 值吗?我试过这样做,但遇到很多语法错误。我什至不确定代码的最后一部分是什么形式。它是嵌套哈希吗?

标签: ruby-on-railsjsonrubyleafletmaps

解决方案


markers: Store.all.map { |store| {latlng: [store.latitude,store.longitude], popup: store.name}.是你失败的代码。

我认为您的想法是正确的,但是您缺少}地图块的关闭。尝试:

markers: Store.all.map { |store| { latlng: [store.latitude, store.longitude], popup: store.name } }

至于数据结构,看起来 map 方法需要一个散列(对象),其中标记键应该包含一个标记散列(对象)数组,每个标记散列(对象)都具有 latlng 和 popup 属性。latlng 属性需要保存纬度和经度值的数组,popup 属性应该保存需要放入弹出窗口的数据字符串。


推荐阅读