如何在嵌套fields_for上设置正确的索引?

时间:2016-02-12 16:01:00

标签: ruby-on-rails angularjs ruby-on-rails-4

我在 rails 中遇到了嵌套 fields_for 的问题,我有一个产品列表,每个产品都可以有多个图片,所以我使用Angular.js来完成这个任务,我按照本教程https://tatey.com/2013/01/13/adding-and-removing-children-with-rails-nested-forms-and-angularjs/,但输入的名称没有正确的名称,因为索引不会在第一个参数上仅在第二个参数上递增,如下所示:

第一个产品有两个图像,因此这是分配给每个输入的名称

catalog[products_attributes][0][images_products_attributes][0][url_image]
catalog[products_attributes][0][images_products_attributes][1][url_image]

第二个产品有一个图像,这是属性的名称

catalog[products_attributes][0][images_products_attributes][0][url_image]

正如您所看到的, products_attributes 上的第二个产品的索引 0 ,但它应该 1

这是我的代码

    <div ng-repeat="product in products">
  <div class="product">
    <%= f.fields_for :products, Product.new do |product|%>
    <div class="field">
      Producto {{$index}}
      <%= product.text_field :name, placeholder: "Nombre"%>
    </div>
    <div class="field">
      <%= product.text_field :description, placeholder: "Descripción" %>
    </div>
    <div class="field">
      <%= product.number_field :price, placeholder: "Precio" %>
    </div>
    <div class="field">
      <%= product.check_box :available %>
    </div>
    <input type="button" name="name" value="+" ng-click="addImageToProduct($index)">
    <div class="images">
      <div class="image" ng-repeat="image in product.images">
        <%= product.fields_for :images_products, ImagesProduct.new, child_index: "{{$index}}" do |image|%>
        <div class="field">
          {{$index}}<%= image.file_field :url_image%>
        </div>
        <%end%>
        <input type="button" name="name" value="-" ng-click="removeImageToProduct($parent.$index, $index)">
      </div>
    </div>
    <%end%>
  </div>
  <input class="step-button remove" type="button" name="name" value="Quitar" ng-click="removeProduct($index)">
</div>

1 个答案:

答案 0 :(得分:0)

从表单中删除child_index

child_index: "{{$index}}"

并将已生成的代码放在视图中:

catalog[products_attributes][{{$parent.$index}}][images_products_attributes][$index][url_image]