Как отфильтровать записи, которые будут отредактированы гемом nested_form_fields в Rails 5.2? - PullRequest
0 голосов
/ 04 декабря 2018

Я использую гем nested_form_fields для перевода некоторых конкретных полей в технический документ.Переводы - это вложенные поля, связанные с документом, так что каждый документ имеет один экземпляр перевода для каждого поля на язык.

В представлении _form для редактирования документа вызывается nested_form_fields для каждого переведенного поля, а местоположениегде отображение соответствующего ввода задается идентификатором DIV:

<div class="row">
        <div class="col-md-1">
          <%= image_tag("next32.png", :id => "unfold") %>
        </div>
        <div class="col-md-1 text-right"> <%= t('Name')%>:
        </div>
        <div class="col-md-10 field"><%= f.text_field :name, :class => "col-md-8" %>
        </div>
      </div>
      <!-- Translations management -->
      <div class="translation">
        <div class="row">
          <div class="col-md-10 col-md-offset-2" id="name_translation">
            <%= f.nested_fields_for :translations  do |locution| %>
            <div class="row">
              <div class="col-md-1">
                <%= locution.collection_select :language, @other_languages, :property, :name  %>
              </div>
              <div class="col-md-8">
                <%= locution.text_field :description, :class => "col-md-10" %>
              </div>
              <div class="col-md-1">
                <%= locution.remove_nested_fields_link {image_tag("remove.png")} %>
              </div>
              <div class="col-md-1">
                <%= locution.hidden_field :field_name, :value => 'name' %>
              </div>
            </div>
            <% end %>
          </div>
        </div>
        <div class="row">
          <div class="col-md-10 col-md-offset-2">
            <%= f.add_nested_fields_link :translations, image_tag("add.png"), data: {insert_into: "name_translation"} %> <%= t('New') %>
          </div>
        </div>
        <br/>
      </div>
      <!-- End of translations -->

Используя этот код для 2 или 3 полей на странице, все переведенные поля, доступные для страницы, отображаются в каждом экземпляреметод nested_fields_for .

Я бродил, есть ли способ добавить фильтр в f.nested_fields_for: translations (в форме блока?)или если мне придется взять все записи перевода и отфильтровать их в цикле do | locution | .

Спасибо за помощь!

1 Ответ

0 голосов
/ 05 декабря 2018

Решение пришло от Нико Ритча, автора самого камня nested_form_fields:

Фильтрация работает так же, как и с обычными fields_for, вы можете напрямую отфильтровать переводы:

f.nested_fields_for: translations, your_filtered_translations do | locution |

Что приводит к следующему обновлению в моем коде:

<%= f.nested_fields_for :translations, @my_object.translations.where("field_name='name'") do |locution| %>

Спасибо большое, Нико!

...