次の構造のネストされたフォームがあります。
- リスト
- アイテム
リスト モデルで検証を実行して、各リストに最大 10 個のアイテムしか含まれていないことを確認します。
validate :max_stack_items
def max_stack_items
if items.size > 10
errors[:base] << "Stack cannot have more than 10 items"
end
これは 90% の確率で問題なく動作します。リスト フォーム内のリスト アイテムを次のように削除できる機能を実装しました。
<%= f.hidden_field :_destroy %>
<%= link_to "remove item", '#', class: "remove_fields" %>
これを実現する関連するJavaScriptがいくつかあります(質問には重要ではありません)。
すでに 10 個のリスト アイテムがあり、フォームを編集するとします。「アイテムの削除」リンクをクリックしてリストアイテムの1つを削除し、新しいリストアイテムを追加した場合。10 個を超えるリスト アイテムがあると見なされるため、検証は失敗します。つまり、1 つのリスト アイテムを削除し、同時に別のリスト アイテムを追加したことを認識しません (つまり、まだ 10 個のリスト アイテムしかありません)。
同時に削除するリスト アイテム レコードを考慮して検証するにはどうすればよいですか?