渲染Rails部分来自AJAX并从AJAX传入局部变量

时间:2013-01-22 03:05:09

标签: ruby-on-rails ajax ruby-on-rails-3 jquery

我正在尝试使用类似于此链接的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>

1 个答案:

答案 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} %>

我已将部分渲染移动到视图中。我认为从视图渲染部分比直接从控制器渲染部分更标准。