我正在尝试使用类似于此链接的AJAX请求呈现Rails部分(并且还将局部变量传递给呈现的部分):
http://isotope11.com/blog/render-partials-with-ajax-requests
他正在做的是使用.get对一个渲染部分的控制器进行ajax调用:
$.get("/ean_hotels/"+ id, params, function(data){
$('#hotelModalContent').html(data);
}, "html");
$('#hotelModal').reveal();
在hotels_controller.rb的控制器操作结束时“渲染”:
render partial: 'hotel_modal_content', locals: { hotel: @hotel, hotel_review_widget: hotel_review_widget }, layout: false
您可以看到控制器代码为要渲染的部分(即hotel和hotel_review_widget)设置局部变量。
我不明白如何从最初的.get AJAX调用传递这些局部变量。
在使用.get
进行AJAX调用时,我也不确定params的用途我希望能够将局部变量从javascript传递到hotels_controller.rb,它将局部变量映射到局部变量。
我感谢你们的任何帮助。
编辑:
添加部分代码
_hotel_model_content.html.erb
<h3><%= hotel %></h3>
答案 0 :(得分:0)
<强>客户端强>
根据$.get和$.ajax文档,params
将进入网址的查询字符串部分:
// request to /somethings?a=abc&b=2
$.get('/somethings', {a: 'abc', b: 2})
服务器强>
可以通过名为params
的类似哈希的对象从Rails操作访问查询字符串参数。 [1]
class SomethingsController < ApplicationController
def index
puts params[:a] # if URL was /somethings?a=123, will print 123
end
end
将它放在一起
让我们用一个部分做一个完整的例子。
以下是客户端代码:
// client call to /somethings?name=Something+123
$.get('/somethings', {name: 'Something 123'}, function(data){
$('#target').html(data);
});
这是服务器:
class SomethingsController < ApplicationController
def index
# bind controller variable @name
@name = params[:name]
end
end
在视图app/views/somethings/index.html.erb
中:
<%= render :partial => 'some_partial', :locals => {:name => @name} %>
我已将部分渲染移动到视图中。我认为从视图渲染部分比直接从控制器渲染部分更标准。