2009-08-28 5 views
2

У меня есть модель, человек, со следующей ассоциацией:Как получить доступ к ActiveRecord :: AutosaveAssociation.marked_for_destruction? внутри родительской модели

has_many :distributions 

accepts_nested_attributes_for :distributions, :allow_destroy => true 

validate :distributions_must_total_100 

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

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

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

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

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

ответ

0

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

Смежные вопросы