親モデルと、別のモデルの潜在的に複数の子のネストされた属性を持つRailsフォームがあります。
子モデルには、配列としてロジックで操作される属性がありますが、Rails 組み込みの serialize メソッドを使用して YAML 文字列にシリアル化されます。
フォーム内で、ユーザーがメンバーを選択的に削除できるように、配列の個々のメンバーを表示します。
ユーザーがすべてのメンバーを破棄すると、問題が発生します。フォームは param の値を Rails コントローラに渡さず、UPDATE アクションが呼び出されると、フォームの params ハッシュにキーがないため属性を無視します。もちろん、これはチェックボックスなどの既知の問題であるため、Rails はチェックボックスごとに 2 つのチェックボックス HTML 要素を自動的に配置します。
ここではチェックボックスではなく、非表示の入力テキスト フィールドを扱います。
私が実装した解決策は、次のように、コントローラーの UPDATE アクションで params ハッシュを直接操作することです。
params[:series][:time_slots_attributes].each { |k,v| v[:exdates] ||= [] }
これはコードのにおいと見なされますか?
代わりに、無効になっていて、ユーザーが最後のメンバーを削除したときにのみ有効になる隠しフィールドを追加する必要がありますか? この解決策も同様に機能しますが、私には扱いにくいようです。