繁体   English   中英

使用ajax和rails删除和更新关联模型的对象

[英]delete and update a object of associated model using ajax and rails

我有两个模型。 可以说defectsproducts

product has_many :defects

defect belongs_to :product

1)我在展示页面上列出了产品的所有相关缺陷

我想在产品展示页面中包括针对缺陷的editdelete操作。 默认情况下,删除操作是删除产品,因为控制器中的产品( @product.destroy )调用了destroy函数。如何删除选定的缺陷?

2)为了创建缺陷,我在缺陷控制器中包含了以下js脚本( create.js.erb

   var html = "<p> <%= @product.defect.try(:defect_description) </p>"
$('#added').append(html);

这是行不通的,因为两者之间的关联很多。如何附加输入的缺陷? 我正在使用产品展示页面中的表格

这是产品展示页面代码,我在其中列出缺陷并添加

<button class="mybtn">Defects </button>
          </div>
          <div id="clicked">
            <% if @product.defects.present? %>
          <% @product.defects.each do |defect|%>
          <p> <%= defect.try(:defect_description) %>  <%= link_to 'Delete', defect, method: :delete, data: { confirm: "Are you sure you want to delete ?"},class: "btn btn-danger btn-xs" %></td></p> 
          <% end %>
          <%= link_to "Add Defects",new_product_defect_path(@product.id),class:'btn btn-sm btn-success',remote:true%>
          <% else %>
             <p id="new_defect"> No defects found for this product </p>
              <%= link_to "Add Defects",new_product_defect_path(@product.id),class:'btn btn-sm btn-success',remote:true%>
           <%end%>
           </div>

要通过编辑/删除操作列出产品的所有缺陷,在产品显示页面中,您将具有以下内容:

<% @product.defects.each do |defect| %>
  <%= defect.description %>
  <%= button_to 'Edit', edit_product_defect_path(@product, defect)
  <%= button_to 'Delete', product_defect_path(@product, defect), method: :delete
<% end %>

对于已创建的缺陷,您应该可以访问该缺陷,以便可以相应地修改append语句。

var html = "<p> <%= @defect.defect_description </p>";
html += "<%= button_to 'Edit', edit_product_defect_path(@product, defect)";
$('#added').append(html);

产品/ show.html.erb

<div id="clicked">
   <%= render 'product_defects' %>
</div>

产品/ _product_defects.html.erb

<% if @product.defects.present? %>
    <% @product.defects.each do |defect|%>
      <p>
         <%= defect.try(:defect_description) %>
         <%= link_to 'Delete', defect, method: :delete, data: { confirm: "Are you sure you want to delete ?"},class: "btn btn-danger btn-xs" %></td>
      </p> 
    <% end %>

    <%= link_to "Add Defects",new_product_defect_path(@product.id),class:'btn btn-sm btn-success',remote:true%>
<% else %>
      <p id="new_defect"> No defects found for this product </p>
      <%= link_to "Add Defects",new_product_defect_path(@product.id),class:'btn btn-sm btn-success',remote:true%>
<% end %>

当您点击Add Defects按钮时,ajax请求将被发送到DefectsController's create action 您需要获取要为其添加缺陷的产品, _product_defects.html.erb如下所示呈现_product_defects.html.erb

缺陷/ create.js.erb

$("#clicked").html("<%= render 'products/product_defects' %>");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM