2015-05-12 1 views
0

Я не уверен, как устранить следующую проблему с яйцом и курицей.
У меня есть модель под названием Batch, которая касается родительской модели Status при проверке - через before_validation обратный вызов.
В after_touch обратный вызов в родительской модели - Status, (status has_many) - я проверяю, имеют ли все дочерние элементы экземпляра Status атрибут, равный true.
Проблема, с которой я сталкиваюсь, заключается в том, что все это выполняется в одной транзакции с базой данных, поэтому мой дочерний экземпляр Batch, который должен быть обновлен с атрибутом, установленным в true, не сохраняется и внутри after_touch обратный вызов в родительском режиме не работает, я отвечаю правдой, делая все это неудачным.after_touch callback не имеет доступа к обновленным атрибутам детей

Считаете ли вы возможным заставить его работать без выполнения двух коммитов в базе данных?

И одна важная информация: атрибут Я проверяю это виртуальный атрибут со значением присвоенных в after_find обратного вызова в детской модели (Batch)

ответ

0

Подумав я изменил логику, как мое обновление ребенок модель запускает обновление на Status.

Вместо использования обратного вызова after_touch в родительском я перевел весь код на обратный вызов, принадлежащий Batch. Мне также пришлось изменить тип обратного вызова, который используется для after_save, чтобы пакетный экземпляр сохранялся в базе данных до использования self.status.batches в обратном вызове .

0

Да,
Вы можете добавить validates_associated: партии в родительская модель.
И добавьте валидацию в пакетной (дочерней) модели при сохранении, чтобы проверить, что атрибут является истинным.

Надеюсь, я ответил ясно.

Благодаря

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