1

我正在尝试使用此链接中的 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 调用时的参数是什么

我希望能够将局部变量从javascript传递到hotels_controller.rb,它将局部变量映射到部分变量。

我很感激这里的任何帮助。

编辑:

添加部分代码

_hotel_model_content.html.erb

<h3><%= hotel %></h3>
4

1 回答 1

0

客户

根据$.get$.ajax文档,params将进入 URL 的查询字符串部分:

// request to /somethings?a=abc&b=2
$.get('/somethings', {a: 'abc', b: 2})

服务器

查询字符串参数可以通过 Rails 操作通过名为params. [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} %>

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

于 2013-01-22T04:17:29.587 回答