2009-08-05 114 views
1

好吧,這有點不尋常,但我有一系列的數據收集表格,可以將數據保存到各自的模型中。我想要做的是自動插入一個公共的父(活動/事件日誌 - 單獨的模型)記錄,這將是每個表單通用的。 (在保存子記錄之前,所有表單都會保存此模型中的隱式記錄)。因此,保存序列需要如下:Ruby/Rails - 在創建子記錄時隱式創建父記錄?

1)在每個細節形式捕獲用戶輸入 2)創建包含摘要信息(用戶ID,記錄類型,時間戳)的新的父記錄 3)捕獲新的父插入PK值(外鍵)進入詳細記錄 4)填充與用戶輸入數據和FK數據的詳細記錄,然後保存 5)提交(或回滾)

我怎樣才能做到這一點 - 哪裏有像這樣的鉤子?顯然,我需要重寫Rails中的一些默認bahaviour來做到這一點 - 有沒有人看到他們可以共享的任何示例?

TIA, 布倫丹

附:在您認爲這是一種低音贊助方法之前,我需要處理髮生活動/重大事件的用例,但基礎詳細信息不可用。
(當只有父項創建時,這可能會在外部導入數據時出現)。現在,我主要對探索Rails解決方案感興趣。

回答

4

有幾種方法可以實現這一點,具體取決於您想要的方式。

  • 在你的孩子記錄模式before_save過濾器,

     
    
    class YourModel < ActiveRecord::Base 
        before_save :create_parent 
    
        def create_parent 
        #do something here 
    
        end 
    
    end 
    

  • 活動記錄觀察員(遵循一個觀察者模式)

    這正好在你的environment.rb文件中

     
    
        config.active_record.observers = :yourmodel_observer 
    
    

    創建一個yourmodel_observer.rb文件

    和代碼

     
        class YourModelObserver < ActiveRecord::Observer 
    
        def after_save(object) 
    
        end 
    
        def after_update(object) 
    
        end 
        end 
    
    

  • +0

    Rishav,優秀 - 正是我一直在尋找-Thx多的快速反應! (我腦中的迷霧開始清晰起來!) – BrendanC 2009-08-05 06:54:57