0

我不知道如何将用户组合到 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 数组,它只是一个城市名称数组(如“纽约,纽约”)。

然后我创建了@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。

我确定我做错了很多事情(并且可能很多事情效率低下)......但是有人可以帮助我让它工作吗?

4

1 回答 1

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帮助器工作的纬度和经度列。我还为没有位置的人删除了 nil 值。

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

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

.map_info_window
  %h4
    =users.count
    in
    =users.first.location
  -users.each do |user|
    =link_to user.full_name, user
于 2013-09-19T07:03:40.887 回答