我找到了一个使用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>
任何想法或建议??
先谢谢你
答案 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()
提交表单而不是点击链接。