2014-02-18 92 views
1

我有以下的模型時,嵌入文檔中運行代碼:如何創建

class User 
    include Mongoid::Document 

    embeds_one :courier, class_name: "Users::Courier" 
    validates_associated :courier 
    accepts_nested_attributes_for :courier 
end 

module Users 
    class Courier 
    include Mongoid::Document 

    embedded_in :user 
    after_create :foo 

    def foo 
     puts "courier created" 
    end 
end 

,但如果我直接在快遞對象調用save,不是我救父對象此回調只是運行。

因此,具有嵌套形式和創建包括信使的用戶的控制器不會運行信使的創建回調。

的mongoid文檔中說,這是由設計:

回調可在任何文件,無論它是嵌入另一個文檔或之內。請注意,爲了高效,Mongoid只會觸發執行持久性操作的文檔的回調。這就是說,Mongoid旨在支持較大的層次結構並處理優化的原子更新回調無法在整個文檔層次結構中觸發。

但是我該如何編寫代碼,在創建快遞的時候執行?在我的情況下,我不能在用戶的after_create回調中運行代碼,因爲有些用戶沒有嵌入式文檔信使。但是當快遞員被添加時,我想要運行回調。

最好的選擇是什麼?

回答

0

找到了答案:

embeds_one :courier, class_name: "Users::Courier", cascade_callbacks: true