【问题标题】:How to properly render a collection in rails using Ajax如何使用 Ajax 在 Rails 中正确呈现集合
【发布时间】:2015-11-27 03:26:36
【问题描述】:

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

我需要使用 Ajax 为集合中的每个对象呈现一个特定的部分,以便我可以显示我在部分中创建的所有功能,并使用 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>

有什么想法或建议吗??

提前谢谢你

【问题讨论】:

    标签: ruby-on-rails ajax


    【解决方案1】:

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

    如果是简单的GET请求,可以有远程链接,比如

    link_to my_path, '', remote: true
    

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      相关资源
      最近更新 更多