如何获取id字段并发送到视图

时间:2011-07-19 01:49:11

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

我想知道如何从我的模型中获取ID字段以传递我在单击标记时调用的JavaScript。

我的模特:

acts_as_gmappable :process_geocoding => false, :lat => "lat", :lng => "lon"

我的控制器

def index
    @locales_markers = Locale.all.to_gmaps4rails
    respond_to do |format|
      format.html  { render :layout => false }
    end
end

我的观点

<%= gmaps("markers" => { "data" => @locales_markers } %>

<% content_for :scripts do %>
    <script>
        Gmaps4Rails.callback = function() {
            for (var i = 0; i <  this.markers.length; ++i) {
                google.maps.event.addListener(Gmaps4Rails.markers[i].serviceObject, 'click', function(){
                    $('#info').load('/messages/' **<HERE I'D LIKE TO PASS THE ID>**);
                    $('#info').dialog("open");
                });

            }
        };
    </script>
<% end %>

谢谢, 卢西亚诺

2 个答案:

答案 0 :(得分:1)

我将控制器更改为:

  def index
    @locales_markers = Locale.all.to_gmaps4rails do |locale|
      "\"id\": \"#{locale.id}\""
    end
    respond_to do |format|
      format.html  { render :layout => false }
    end
  end

并且工作正常,但是,我无法在视图中获取id值。

如何解决?

谢谢, 卢西亚诺

答案 1 :(得分:1)

每个标记属性都已存储并可以检索。

在您的示例中,只需执行以下操作:

$('#info').load('/messages/' + Gmaps4Rails.markers[i].id );

编辑:

您应该创建另一个js函数:

custom_listener = function(the_id) {
  return function(){
        $('#info').load('/messages/' + the_id );
        $('#info').dialog("open");
  };
};

并以这种方式称呼它:

Gmaps4Rails.callback = function() {
 for (var i = 0; i <  this.markers.length; ++i) {
     google.maps.event.addListener(Gmaps4Rails.markers[i].serviceObject, 'click', custom_listener(Gmaps4Rails.markers[i].id));
  }
};