如何从Javascript事件更新ruby变量?

时间:2015-11-06 22:52:08

标签: javascript ruby-on-rails google-maps-api-3

我正在处理单页Rails应用程序,其中包含大量Google地图集成,并且在Rails和Javascript之间的数据流方面存在问题。

我的数据库有一个城市表。用户点击某个城市的Google地图标记。然后,我想弹出一个叠加层,根据点击的城市进行活动记录查询,并显示有关该城市的信息。

目前,我在用户点击城市并创建Javascript事件时触发了AJAX请求:

 google.maps.event.addListener(marker,'click', function(event) {
   var latitude = event.latLng.lat();
   var longitude = event.latLng.lng();

   $.ajax({
     method: 'PUT',
     url: '/cities',
     data: { latitude: latitude, longitude: longitude },
     dataType: 'json'
   });

   popup.style.display = 'block';

  });
});

这会影响我的控制器的更新功能:

def update        
     latitude = params[:latitude]
     longitude = params[:longitude]
     @clicked_city = City.find_by(latitude: latitude, longitude: longitude) 
end

这会更新@clicked_city变量,但我的观点不知道,无法进行有效记录查询并显示我喜欢的信息。非常确定我从根本上不了解这应该如何在RESTful应用程序中工作,并希望有一个更简单的方法来实现这一点。

2 个答案:

答案 0 :(得分:0)

您需要渲染显示已更新的实例变量的html部分。您可以使用rails respond_with 方法。

将其添加到控制器类的顶部

respond_to :html, :xml, :json

它会告诉你的应用程序在调用响应者时更新你的html xml和json。

将此添加到更新方法的末尾。

respond_with [@clicked_city]    

当调用该方法时,它应该更新你的html。

进一步阅读

http://edgeapi.rubyonrails.org/classes/ActionController/Responder.html

http://www.gotealeaf.com/blog/the-detailed-guide-on-how-ajax-works-with-ruby-on-rails

Updating partial view with AJAX

Purpose of model variable in respond_with

注意:根据您运行的Rails版本,您可能需要将响应者包含为gem。

https://github.com/plataformatec/responders

Why is respond_with being removed from rails 4.2 into it's own gem?

答案 1 :(得分:0)

def update
  latitude = params[:latitude]
  longitude = params[:longitude]
  @clicked_city = City.find_by(latitude: latitude, longitude: longitude)
  respond_to do |format|
    format.js
  end
end
你的update.js中的

$('#your_id').html('<%= j render 'your_partial' %>');