如何在成功创建新.erb
后告诉Ajax刷新Box
代码?我正在使用rails 4.
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 :(得分: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) %>');
答案 1 :(得分:0)
你的方法似乎很好,可能在这个问题中缺乏一些背景。
如果您尝试同时调用此代码 ,它将无法正常工作(如果您在尝试显示更新的show.html.erb
时,则无法使用IE从其他页面更新boxes
...
如果您尝试通过ajax创建一个框,并将新元素附加到当前页面,我就不明白为什么您当前的代码无效。
我们做过类似的事情(http://firststopcosmeticshop.herokuapp.com - 尝试将商品添加到购物车&amp;然后删除):
使用Ajax的技巧是使代码尽可能模块化。这是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");