Как получить доступ к ActiveRecord :: AutosaveAssociation.marked_for_destruction? из родительской модели - PullRequest
2 голосов
/ 28 августа 2009

У меня есть модель, Персона, со следующей ассоциацией:

has_many :distributions

accepts_nested_attributes_for :distributions, :allow_destroy => true

validate :distributions_must_total_100

Пользовательская проверка в настоящее время не выполняется, когда она не должна - когда некоторые проверки были помечены для уничтожения - потому что они все еще отображаются в атрибуте «распределения» (в памяти, не говоря уже о том, что находится в БД) раньше Человек и его Распределения сохраняются.

Я хотел бы использовать ActiveRecord::AutosaveAssociation.marked_for_destruction? в моем валидаторе, чтобы игнорировать распределения, которые должны быть уничтожены.

  1. Как мне достичь этого метода? Не совсем уверен, каково отношение Distribution (ваша обычная модель Rails) к этому классу.

  2. Это ужасный нечистый хак? Это только немного грязно, и это наиболее точное решение проблемы.

Я прошелся по исходному коду ActiveRecord в отладчике, чтобы подтвердить, что записи действительно помечены для уничтожения (т.е. не ошибка Javascript или построителя форм).

1 Ответ

0 голосов
/ 28 августа 2009

Оказывается, вы можете просто позвонить marked_for_destruction? в случае экземпляра Distribution, и он отлично работает.

...