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常に最後のブロック(つまり、タイプNの子)のデフォルトを持つフィールドを提供します。どうすれば適切な機能を提供できますか?fields_for/builderfields_for/builderlink_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 に答える