尝试使用gmaps4rails将用户组合到同一个标记中

时间:2013-09-19 06:30:08

标签: ruby-on-rails json ruby-on-rails-3 gmaps4rails

我无法弄清楚如何将用户组合到gmaps4rails中的相同标记中。我觉得我有点亲近,但是无法弄清楚在使用gmaps4rails助手,转换为JSON和部分渲染之间我做错了什么。

def map
   distinct_locations = User.where("location IS NOT NULL").select("DISTINCT(LOCATION)").map(&:location)
   @markers = []
   distinct_locations.each do |city|
     temp_marker = User.where(:location => city).first.to_gmaps4rails
     city_users = User.where(:location => city)
     render_to_string(:partial => "/users/map_marker_info", :locals => { :users => city_users})
     @markers << temp_marker
   end
   @markers
end

正如你所看到的,在我的控制器中,我首先得到一个distinct_locations数组,它只是一个城市名称数组(如“New York,New York”)。

然后我创建@markers以保存JSON,我最终会返回。

对于我找到的每个独特城市,我正在尝试使用我在该城市找到的第一个用户使用to_gmaps4rails助手创建一个标记。然后我试图找到该城市的所有其他用户(通过city_users = User.where(:location => city)

然后我试图在同一个城市使用这个类似的用户集合渲染我的部分(但最终会从用户中提取不同的属性):

#_map_marker_info.html.haml
.map_info_window
  %h4
    =users.first.location
  %p
    =users.count

最后,我会在处理完每个城市后将标记添加到@markers

最终,我将@markers作为JSON返回,然后通过令人敬畏的gmaps4rails gem将其变成漂亮的地图。

我确定我做了很多错事(可能还有很多事情效率不高)......但有人可以帮助我让它发挥作用吗?

1 个答案:

答案 0 :(得分:0)

嗯,只是在你发布问题之后事情结晶的那一刻。无论如何,这是我拥有的,它的工作原理。 (虽然仍然向人们提供更有效的答案)。这个“自定义标记”与官方文档非常相似: https://github.com/apneadiving/Google-Maps-for-Rails/wiki/Controller

def map
    @markers = User.select("DISTINCT ON (location) *").where("location IS NOT NULL").all.to_gmaps4rails do |user, marker|
      city_users = User.where(:location => user.location)
      marker.infowindow render_to_string(:partial => "/users/map_marker_info", :locals => { :users => city_users })
    end
end

基本上,根据不同的位置选择用户(您实际上只需要to_gmaps4rails帮助程序的纬度和经度列。我还删除了没有位置的人的零值。

然后,对于每个“位置”,基本上,创建标记,但对于本地人,传入具有相同位置的所有用户。这就是city_users的用途 - 同一城市的所有用户。

所以现在我可以在我的部分中做这样的事情:

.map_info_window
  %h4
    =users.count
    in
    =users.first.location
  -users.each do |user|
    =link_to user.full_name, user