2009-08-05 201 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