2015-12-19 91 views
1

如何在成功創建新Box後告訴Ajax刷新.erb?我使用的鐵軌4成功創建對象後,Ajax刷新.erb代碼。

views/modifications/show.html.erb

<tbody id="boxes_count"> 
    <% @modification.box.each do |b| %> 
     <tr><%= b.name %></tr> 
    <% end %> 
</tbody> 

views/boxes/create.js.erb

$("<%= escape_javascript(render @modification.boxes.last) %>").appendTo("#boxes_count"); 

回答

0

views/modifications/show.html.erb

<tbody id="boxes_count"> 
    <%= render :boxes_content, boxes: @modification.boxes %> 
</tbody> 

views/modifications/_boxes_content.html.erb

<% boxes.each do |b| %> 
    <tr><%= b.name %></tr> 
<% end %> 

views/boxes/create.js.erb

$("#boxes_count").html('<%=j render(:boxes_content ,boxes: @modification.boxes) %>'); 
+0

它不工作!以及爲什麼你命名新文件_table_body,如果你沒有更名這個名字? – DanielsV

0

你的方法似乎不錯,也許是缺乏的問題,一些背景。

如果你想調用這個代碼同時,它不會(如果你想顯示更新show.html.erb而你更新從另一個頁面boxes IE)工作...


如果您嘗試通過ajax創建一個盒子,並將新元素附加到當前頁面,我不明白爲什麼您當前的代碼不起作用。

我們已經做了類似的事情(http://firststopcosmeticshop.herokuapp.com - 嘗試將項目添加到購物車&然後移除):

enter image description here

與阿賈克斯的技巧是讓你的代碼儘可能模塊化。這是由Wayne Chu建議 - 這是我會做的:

#app/views/modifications/show.html.erb 
<%= link_to "New", modification_boxes_path, method: :post, remote: true %> 
<tbody id="boxes_count"> 
    <%= render @modification.boxes %> 
</tbody> 

#app/views/modifications/_box.html.erb 
<tr> 
    <td><%= box.name %></td> 
</tr> 

#app/controllers/boxes_controller.rb 
class BoxesController < ApplicationController 
    respond_to :js, :html, only: :create 
    def create 
     @modification = Modification.find params[:modification_id] 
     @box = @modification.boxes.new box_params 
     @box.save 
    end 

    private 

    def box_params 
     params.require(:box).permit(:name) 
    end 
end 

#app/views/boxes/create.js.erb 
$("<%=j render @box").appendTo("#boxes_count");