我使用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 | 循环中过滤掉。
感谢您的帮助!
答案 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!