親と子という2つのモデルクラスがあります。最初に親が作成され、次に子を追加できます。
親の情報を編集し、場合によっては子を追加できる編集ページを作成しようとしています。
親が子属性にアクセスできるように設定しました。
has_one :child
accepts_nested_attributes_for :child
そして、親情報を編集する私の見解では、すべての親情報を表示するフォームがあり、次に既存の子情報を編集するか、新しい子を追加するためのフィールドがあります。
<%= form_for(@parent, :as => :parent, ... %>
<%= form.text_field(:field_one) %>
<%= form.text_field(:field_two) %>
<%= form.fields_for @child do |child| %>
<%= child.text_field(:child_field_one) %>
<%= child.text_field(:child_field_two) %>
<%end%>
<%end%>
問題は、これを機能させる唯一の方法は、ビューをレンダリングする前に、親編集コントローラーに新しい子を作成させ、それを親に関連付けさせることです。次に、ユーザーが保存しようとすると、コントローラーは子フィールドが空であるかどうかを確認し、空である場合は新しく作成された子を削除します。これに関する 1 つの問題は、編集ページが読み込まれるたびに空の子 (子が存在しないと仮定) を作成し、それをデータベースに保存することです (これは望ましくありません)。
レンダリングする前に新しい子を作成せずに、親編集ページに存在しない子のフィールドを表示するエレガントな方法はありますか? 理想的には、すべてを 1 つのフォームにまとめたいと考えています。複数の保存ボタンを備えた複数のフォームでこれを行う方法を思いつくことができると確信しています。