成功创建对象后,Ajax刷新.erb代码。

时间:2015-12-19 14:10:08

标签: javascript jquery ruby-on-rails ajax ruby-on-rails-4

如何在成功创建新.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");

2 个答案:

答案 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;然后删除):

enter image description here

使用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");