Вложенные поля Rails-кокон, в форме редактирования отображать существующие изображения рядом с каждым полем - PullRequest
1 голос
/ 14 марта 2019

Я использую cocoon gem для добавления вложений в продукт. Это та часть, где я рендеринг вложенных полей формы кокона внутри формы нового продукта.

<div id="attachments">
   <%= f.label :images, required: true %>
    <%= render 'products/attachment_fields', form: attachment  %>
    <% end %>

     <div class="links" id="add_attachment" style="display: inline; float: right;">
       <%= link_to_add_association 'add more images', f, :attachments, form_name: 'form' %>
     </div>
 </div>

Это частичное:

<div class="nested-fields">
  <span class="control-fileupload">
    <%= form.input :images,:label => "Choose a file", as: :file, :input_html => { class: "file_input" } %>
  </span>
  <%= link_to_remove_association "remove", form %>
</div>

Все вышеперечисленное работает просто отлично. Продукт создается вместе с вложениями.

Сейчас я пытаюсь разработать форму редактирования продукта, в которой я мог бы редактировать как продукт, так и приложения. С этим тоже все нормально работает. Единственная проблема, с которой я сталкиваюсь, это .... как добавить каждое существующее изображение вложения в соответствующее вложенное поле кокона в форме редактирования ??? В настоящее время отображаются только поля, и пользователь не знает, какое поле содержит какое изображение, поэтому он может вносить изменения, которые он желает. Я попробовал следующее, изображение показывалось правильно на каждом поле, но каждое существующее поле рендерилось дважды:

<div id="attachments">
   <%= f.label :images, required: true %>
      <%= f.simple_fields_for :attachments do |attachment| %>
        <% if @attachments.present? %>
          <% @attachments.each do |attached| %>
            <%=image_tag attached.images_url(:thumb).to_s %>
            <%= render 'retailer_products/attachment_fields', form: attachment  %>
           <% end %>
         <% end %>
      <% end %>
          <div class="links" id="add_attachment" style="display: inline; float: right;">
            <%= link_to_add_association 'add more images', f, :attachments, form_name: 'form' %>
          </div>
  </div>

1 Ответ

2 голосов
/ 14 марта 2019

В вашем attachment_fields добавьте эти строки для отображения изображения

<% if form.object.persisted? %>
    <%= image_tag form.object.images_url(:thumb).to_s %>  ## form.object will return your attachment object, from this you can access your image
<% end %>

Ваши существующие поля визуализируются несколько раз, потому что вы рендерили вложенные поля несколько раз в цикле each для attachments.

Вернуть div id="attachments" на:

<div id="attachments">
   <%= f.label :images, required: true %>
    <%= render 'products/attachment_fields', form: attachment  %>
    <% end %>

     <div class="links" id="add_attachment" style="display: inline; float: right;">
       <%= link_to_add_association 'add more images', f, :attachments, form_name: 'form' %>
     </div>
 </div>
...