如何使用Ajax在rails中正确呈现集合

时间:2015-11-26 19:13:37

标签: ruby-on-rails ajax

我找到了一个使用JSON的解决方案,但还不足以满足我的需要。使用JSON的解决方案位于:Render with JSON

我需要使用Ajax从集合中为每个对象呈现特定的部分,以便我可以显示我在partial中所做的所有功能,并且使用某些验证与JSON无关。目的是动态地对数据库执行查询,并在搜索表单中的每次更改时呈现查询结果。

这是我在控制器中的功能

def clientsjson

      @search  =  Client.search(params[:q])
      @clients = @search.result

 end

要呈现我需要的部分(_client.html.erb),通常,我只使用它:

<%= render @clients %>

但是我知道我需要使用Ajax动态渲染。

我用来检测表单中的更改的Ajax函数是:

    $(document).ready(function() {
       $( ".searchupdate" ).change(function() {
               $.getJSON("/client/clientsjson?"+$('#client_search').serialize(), function (data) {

           //*Here I use JSON to create a text and print HTML and works*//
         $('#clientList1').html('');
         $('#clientList1').empty().append($ul);
     });  
    });
 });

我打印结果的索引(只有列):

<div class="row">
     <div class="col-xs-4" >
        <%= render "searchform" %>
    </div>
      <div class="col-xs-8" >
        <div id="Auctionlist1">
          <%= render @clients %>
         </div>
    </div>

</div>

任何想法或建议??

先谢谢你

1 个答案:

答案 0 :(得分:1)

你应该有一个控制器,其动作响应.searchupdate更改的请求,你应该为它渲染一个js视图。

如果是简单的GET请求,您可以使用远程链接,例如

link_to my_path, '', remote: true

使用jquery更改其路径,然后使用jquery单击它。它向rails发送一个ajax请求,它由你的控制器接收(你需要为它指定一个路由)。

您需要在该控制器中添加respond_to :js

然后,如果操作是“index”,则在index.js.erb中,您可以执行所需的任何javascript,包括渲染部分:

$('.my-element').html('<%= j(render partial: '_my_partial.html.erb', locals: { my_var: @my_var }) %>');

如果您需要发送其他类型的请求,例如POST,您可以创建一个包含隐藏输入的表单,将其指向所需的端点,设置正确的方法并设置remote: true。其余部分是相同的,区别在于您$(document).ready()提交表单而不是点击链接。