フォーム要素にさまざまなデフォルトを適用できるように、フォーム上で繰り返されるネストされた子オブジェクトタイプを持つネストされたフォームがあります。子オブジェクトを異なるクラスの子オブジェクトに分離することは意味がありません。ユーザーにとって意味のある方法でそれらを整理し、異なるデフォルトを設定する目的でのみそれらを分離しているからです。それ以外は同じです。
私の部分では、私はこのようなものを持っています:
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/builder
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
どうもありがとう、スコット