我无法弄清楚如何将用户组合到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将其变成漂亮的地图。
我确定我做了很多错事(可能还有很多事情效率不高)......但有人可以帮助我让它发挥作用吗?
答案 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