Ruby / Rails - 在创建子记录时隐式创建父记录?

时间:2009-08-05 05:34:46

标签: sql ruby-on-rails insert parent-child

好的,这有点不寻常,但我有一系列数据收集表单,可以将数据保存到各自的模型中。我想要做的是自动插入每个表单通用的公共父(活动/事件日志 - 单独模型)记录。 (在保存子记录之前,所有表单都将在此模型中保存隐式记录)。因此保存顺序必须如下:

1)在每个细节表单上捕获用户输入  2)创建包含摘要信息的新父记录(用户ID,记录类型,时间戳)  3)捕获新的父PK值以便插入(作为外键)到详细记录中  4)用用户输入数据和FK数据填充详细记录,然后保存  5)提交(或回滚)

我怎么能这样做 - 这样的钩子在哪里?显然我需要在Rails中覆盖一些默认的bahaviour才能做到这一点 - 有没有人见过他们可以分享的任何例子?

TIA, 布伦丹

P.S。在您认为这是一种低音方法之前,我需要处理发生活动/重要事件的用例,但基础详细信息不可用。
(当只创建父项时,可能会出现外部导入数据)。现在我主要对探索Rails解决方案感兴趣。

1 个答案:

答案 0 :(得分: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