我需要爲我的Rails應用程序添加一些AJAX/JS功能。Rails 4 - 用AJAX/JS部分渲染
要顯示上面的標籤的內容,我打電話
<%= render 'tape_bulk_cocs/sporeCounts' %>
這裏面的部分是下面的代碼(減去HTML標記來顯示文本):
<div id="samples">
<% if @tape_bulk_coc.tape_bulk_coc_samples.any? %>
<% @tape_bulk_coc.tape_bulk_coc_samples.each do |cur| %>
<% if !cur.spore_type_count %>
<%= link_to 'Add Spore Count', new_spore_type_count_path(:tape_bulk_coc_sample_id=>cur.id), :remote=>true, :id => "new_spore_count", class: "tiny button expanded" %>
<% end %>
<% end %>
<% end %>
</div>
裏面我spore_type_counts_controller/new
我有:
def new
@spore_type_count = SporeTypeCount.new
@tape_bulk_sample_id = params[:tape_bulk_coc_sample_id]
@category_count = [["Rare: 1 to 10","Rare: 1 to 10"], ["Low: 11 to 100","Low: 11 to 100"], ["Medium: 101 to 1000","Medium: 101 to 1000"], ["High: > 1000","High: > 1000"]]
respond_to do |format|
format.js
end
end
然後,在app/views/spore_type_counts/new.js.erb
$('#samples').hide().after('<%= j render("spore_type_counts/form") %>');
到目前爲止,一切都會按計劃,當我點擊「添加孢子數」選項卡更改顯示像這樣:
這是我遇到的問題發生的地方。
當我提交spore_type_counts/form
我進入create
動作的控制器,它是這樣的:
def create
@spore_type_count = SporeTypeCount.new(spore_type_count_params)
respond_to do |format|
if @spore_type_count.save
format.js { render 'tape_bulk_cocs/sporeCounts'}
end
end
end
一旦在這裏,一切都提交到數據庫正確,但頁面沒有改變。我無法弄清楚如何重新渲染局部(第一張圖片)tape_bulk_cocs/sporeCounts
。
本質上,一旦我提交表單,我需要從spore_type_count_controller/new
回到tape_bulk_coc_controller/show
並更新我的對象,而不刷新頁面。
我該怎麼做?還是我需要重構我的應用程序以改變工作方式?
謝謝你的回覆。在看到你的答案之前,我已經走得很遠了。我已經有了一個'spore_type_counts/create.js.erb'文件,但正在努力弄清楚放入它的內容。我有一些工作,但看到你的回答後,我完成了它。 解決方案來自'create.js.erb':'$('#spore_count')。remove(); (「#samples')。show()。html(」<%= j render('tape_bulk_cocs/sporeCounts')%>「);' –
有沒有辦法在同一時間更新其他標籤顯示他們的內容?具體來說,我的「Saved Samples」標籤。當我提交'spore_type_count'時,我需要'Saved Samples'選項卡中的示例進行更新,以便用戶無需刷新頁面即可查看spore_count –
我很高興能提供幫助!要回答你關於更新其他標籤的問題......是的,你當然可以。請記住 - 您可以完全訪問js.erb模板中的當前呈現的HTML,因此只需使用jQuery更新所需的選項卡的內容即可。添加另一行JavaScript選擇其他選項卡,並將其內容更新爲任何您需要的內容。 –