2016-11-18 3 views
0

У меня есть Conversation с сообщениями и участникирельсы ассоциации обратного вызова после объединения сохраняет

в контроллере я строю и сохранение

conversation = Conversation.new(params) 
conversation.participations.build(params) 
conversation.messages.build(params) 
conversation.save 

Мой Message.rb имеет after_create обратный вызов.

на save Я ожидал, что все объекты будут сохранены, И затем все их обратные вызовы будут запущены.

То, что я нахожу, - это обратный вызов сообщения, который стреляет до того, как участились действия.

+1

Как вы проверяете, что участие было сохранено - не забудьте, что фиксация не будет выполняться до завершения всей транзакции - это произойдет после обратного вызова 'after_create'. Возможно, вы хотите использовать 'after_commit' вместо этого - сложно попытаться решить проблему, потому что вы не указали какие-либо проблемы или требования для этого. – David

+0

У меня есть транзакция вокруг сохранения всех объектов. Я думаю, что урок здесь: если вам нужно убедиться, что объекты сохранены, то используйте 'after_commit' –

+0

@David, если вы переместите свой комментарий к ответу, тогда я его помету правильно. –

ответ

1

Не забывайте, что фиксация не будет выполняться до завершения всей транзакции - это происходит после обратного вызова after_create. Таким образом, ваши объекты не будут полностью сохранены в базе данных до успешного завершения. conversation.save

Возможно, вы захотите использовать after_commit вместо этого - трудно сказать, может ли это решить ваш вопрос, поскольку его непонятно из вашего вопроса, какова мотивация есть или где вы испытываете какие-либо проблемы.

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