4

我有一个嵌套子对象类型的嵌套表单,它在表单上重复,以便我可以在表单元素中应用各种不同的默认值。将它们分成不同类别的子对象对我来说没有意义,因为我只是为了以对用户有意义的方式组织它们并填充不同的默认值而将它们分开;它们在其他方面是相同的。

在我的部分,我有这样的事情:

Children 1
<%= f.fields_for :children do |builder| %>
  <% next if not builder.object.type == 1 %>
  ... fields for type 1 children ...
<% end %>
<%= f.link_to_add( "add child", :children ) %>

Children 2
<%= f.fields_for :children do |builder| %>
  <% next if not builder.object.type == 2 %>
  ... fields for type 2 children ...
<% end %>
<%= f.link_to_add( "add child", :children ) %>

... etc ...

这很好用,除了link_to_add总是给出具有最终fields_for/builder块(即类型 N 子项)的默认值的字段,而不是使用fields_for/builder紧邻它们上方的块的默认值。我怎样才能提供link_to_add正确的功能?

来自https://github.com/ryanb/nested_form#enhanced-jquery-javascript-template

您可以覆盖将新子表单插入表单的默认行为。例如:

 window.nestedFormEvents.insertFields = function(content, assoc, link) {
   return $(link).closest('form').find(assoc + '_fields').append($(content));
 }

在我看来,必须对这个 insertFields 函数进行一些小的调整,让它复制所需的表单元素,而不仅仅是页面上的最终元素。我只有最简单的javascript经验,所以我希望有人能指出那是什么!

仅供参考,完整的 jquery 文件在这里: https ://github.com/ryanb/nested_form/blob/master/vendor/assets/javascripts/jquery_nested_form.js

非常感谢,斯科特

4

1 回答 1

1

我忽略了发布我为这个问题找到的解决方案。来晚了,来了。

我最终为我的子类型使用了单表继承 (STI),使每个类型都成为一个类,尽管这对我来说太过分了。然后,以下工作:

<h>ClassOneChild form</h>
<%= f.fields_for :class_one_children do |builder| %>
  ...
<% end %>
<%= f.link_to_add( "add child", :class_one_children ) %>

<h>ClassTwoChild form</h>
<%= f.fields_for :class_two_children do |builder| %>
  ...
<% end %>
<%= f.link_to_add( "add child", :class_two_children ) %>

...

<%= f.submit "Save Children" %>
于 2013-11-01T18:17:00.680 回答