2016-11-18 59 views
0

我有一個消息,並參加軌協會回調關聯後保存

在控制器我建立和保存

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

Message.rb有after_create回調Conversation

on save我期望所有的對象被持久化,然後所有的回調被觸發。

我發現的是消息回調在參與持續之前就開始了。

+1

您如何檢查參與是否已被持續 - 不要忘記在整個事務完成之前不會運行commit - 發生在'after_create'回調之後。也許你想使用'after_commit'來代替 - 很難嘗試一種解決方案,因爲你沒有提供任何問題或要求的跡象。 – David

+0

我有一個交易的所有對象的保存。我認爲這裏的教訓是:如果你需要確保對象是持久的,那麼使用'after_commit' –

+0

@David如果你將你的評論移到一個答案,那麼我會標記它是正確的。 –

回答

1

不要忘記在整個交易完成前不會執行commit - 發生在after_create回調後。因此,你的對象不會被完全保存到數據庫,直到conversation.save

成功完成也許你想使用after_commit代替 - 很難說這是否會解決你的問題是它不是從你的問題的動機是什麼清晰是或在哪裏遇到任何問題。