次の関連付けを持つモデル Person があります。
has_many :distributions
accepts_nested_attributes_for :distributions, :allow_destroy => true
validate :distributions_must_total_100
カスタム検証は現在、失敗すべきではない場合 (一部の検証が破棄対象としてマークされている場合) に失敗します。これは、Person およびそのディストリビューションが保存されます。
ActiveRecord::AutosaveAssociation.marked_for_destruction?
バリデーター内で使用して、破棄されようとしているディストリビューションを無視したいと思います。
どうすればその方法に到達できますか? Distribution (通常の Rails モデル) とそのクラスとの関係がどのようなものかはよくわかりません。
これは恐ろしい汚れたハックですか?少し汚れているだけで、問題に対する最も正確な修正です。
デバッガーで ActiveRecord のソース コードを調べて、レコードが実際に破棄対象としてマークされていることを確認しました (つまり、Javascript またはフォーム ビルダーのバグではありません)。