Rails - 在ajax文件上载中更新嵌套模型的部分

时间:2017-08-01 02:07:24

标签: ruby-on-rails ajax carrierwave

我有一个带有模型</head>的rails应用程序,它具有嵌套模型<ion-content></ion-content> <ion-footer> <ion-toolbar> <ion-title>Footer</ion-title> </ion-toolbar> </ion-footer> 。我使用Carrierwave上传PDF,Word文档等作为文档。

在我的products我的表格字段呈现部分;

productdocuments

部分已上传的文档:

edit.html.erb

我看到的问题是,当我上传文件时,rails会在<%= f.file_field :resource, name: "product[productdocuments_attributes][][resource]", multiple: true, :placeholder => "Resource", id: "product_productdocuments_attributes" %> 上触发update.js.erb的渲染,而不是来自<%= render @product.productdocuments %> 的create.js.erb这使得使用新Product附加部分变得更加困难。

知道如何从Productdocuments触发create.js.erb吗?

1 个答案:

答案 0 :(得分:0)

我想在edit.html.erb中有类似的内容:

<%= form_for @product, remote: true do |f| %>
  <%= f.file_field :resource, name: "product[productdocuments_attributes][][resource]", multiple: true, :placeholder => "Resource", id: "product_productdocuments_attributes" %>
  <%= f.submit %>
<% end %>

submit上向ProductsController发送请求,而不是按照您的预期向ProductDocumentsController发送请求。由于@product是持久记录,因此请求转到update方法。

在这种情况下,产品文档的其他表单将解决问题:

<%= form_for @product.productdocuments.build, remote: true do |f| %>
  <%= f.file_field :resource, , multiple: true, :placeholder => "Resource" %>
  <%= f.submit %>
<% end %>

@product.productdocuments.build构建一个新对象,因此请求将转到create方法。

希望它有所帮助。