【问题标题】:Ajax refresh .erb code after successful creating object.成功创建对象后,Ajax 刷新 .erb 代码。
【发布时间】:2015-12-19 14:10:08
【问题描述】:

我成功新建Box后如何告诉Ajax刷新.erb代码?我正在使用 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");

【问题讨论】:

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


    【解决方案1】:

    您的方法似乎不错,可能在问题中缺少一些上下文。

    如果您尝试同时调用此代码,它将不起作用(即,如果您在从另一个页面更新 boxes 时尝试显示更新后的 show.html.erb )...


    如果您尝试通过 ajax 创建一个框,并将新元素附加到当前页面,我不明白为什么您当前的代码不起作用。

    我们已经做了类似的事情(http://firststopcosmeticshop.herokuapp.com -- 尝试将商品添加到购物车然后移除):

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

    【讨论】:

      【解决方案2】:

      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) %>');
      

      【讨论】:

      • 它不起作用!以及为什么你命名新文件 _table_body,如果你不使用这个名字?
      猜你喜欢
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 2011-11-20
      • 2015-10-19
      • 2018-01-24
      • 1970-01-01
      相关资源
      最近更新 更多