我正在处理单页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应用程序中工作,并希望有一个更简单的方法来实现这一点。
答案 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' %>');