如何在Rails 5.2中过滤nested_form_fields gem编辑的记录?

时间:2018-12-04 08:57:50

标签: ruby-on-rails nested-form-for

我使用nested_form_fields gem翻译技术文档中的某些特定字段。翻译是与文档关联的嵌套字段,因此每个文档每种语言每种字段都有一个翻译实例。

在用于编辑文档的_form视图中,为每个已翻译字段调用nested_form_fields,并且由相应DIV的ID设置显示相应输入的位置:

<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 :(得分:0)

该解决方案来自nested_form_fields gem的作者Nico Ritche:

  

过滤与正常的fields_for一样,您可以提供   直接过滤掉的翻译:

     

f.nested_fields_for:翻译,your_filtered_translations可以   | locution |

这会导致我的代码进行以下更新:

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

非常感谢Nico!