使用gmaps4rails在infowindow中放置一个链接

时间:2012-05-02 17:06:20

标签: ruby-on-rails ruby-on-rails-3 google-maps javascript-events gmaps4rails

我正在使用gmaps4rails,现在当我点击标记时出现数据库中的信息,我需要在标记内放置一个链接。我怎么样?

型号:

def gmaps4rails_address
  city
end

def gmaps4rails_infowindow
   "<h4>#{city}</h4>"  
end

控制器:

def index
  @postos = Posto.all
  @markers = Posto.all.to_gmaps4rails  

  @json = Posto.all.to_gmaps4rails  do |posto, marker|
    marker.json "\"id\": #{posto.id}"
  end  
  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @postos }
  end
end

2 个答案:

答案 0 :(得分:0)

我不建议您使用gmaps4rails_infowindow方法:不应在模型层提供视图详细信息。

您应该使用partial:

在控制器中配置infowindow
@json = Posto.all.to_gmaps4rails do |posto, marker|
  marker.infowindow render_to_string(:partial => "/path_to/your_template", :locals => { needed_locales })
end

详细信息位于gem's wiki。 (你甚至可以使用js模板,但这不是问题,它也在wiki中解释)

答案 1 :(得分:0)

以下是两种方式。

直接在控制器中:

hashes = Gmaps4rails.build_markers(collection) do |item, marker|
  marker.infowindow(ActionController::Base.helpers.link_to(item.name ||= 'Name?',preplan_path(item)).html_safe)

  marker.title item.name
  marker.picture({
                     # :url => "/assets/building_icon.png",
                     :url => "/assets/text.png",
                     :width => 32,
                     :height => 32
                 })
  marker.lat item.latitude
  marker.lng item.longitude
end

使用控制器中的部分:

hashes = Gmaps4rails.build_markers(collection) do |item, marker|
  marker.infowindow render_to_string(:partial => "/structures/info_window", :locals => { :structure => item})

部分可以是你喜欢的任何东西:

# view/structures/_info_window.html.haml
= link_to structure.name, [structure.preplan, structure]
- unless structure.longitude.nil?
  %br
  = link_to "Drive to?", "https://maps.google.com/maps?daddr=#{structure.latitude},#{structure.longitude}", target: "_blank"