2015-11-26 72 views
0

我找到了一種使用JSON的解決方案,但不足以滿足我的需要。 JSON的解決方案如下:Render with JSON如何使用Ajax在rails中正確呈現集合

我需要呈現一個特定的部分從使用Ajax,所以我可以顯示所有我在做局部的功能和使用特定的驗證集合的每個對象是沒有可能做JSON。目的是動態地對數據庫執行查詢,並在搜索表單中顯示每次更改的查詢結果。

這是我在控制器功能

def clientsjson 

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

end 

要渲染的部分,我需要(_client.html.erb),通常情況下,我只能用這個:

<%= render @clients %> 

但是知道我需要使用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

您應該具備響應來自.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()您提交的形式,而不是點擊鏈接的差異。