2009-08-05 4 views
1

これは少し異例ですが、データをそれぞれのモデルに保存する一連のデータ収集フォームがあります。私がしたいのは、各フォームに共通する共通の親(アクティビティ/イベントログ - 別モデル)レコードを自動挿入することです。 (すべてのフォームは、子レコードを保存する前に、このモデルに暗黙のレコードを保存します)。だから、シーケンスは次のようにする必要があります保存します。)Ruby/Rails - 子レコードを作成するときに暗黙的に親レコードを作成しますか?

1)各詳細フォームキャプチャユーザー入力 2に要約情報を含む新しい親レコードを作成します(ユーザID、レコードタイプ、タイムスタンプ) 3)新しい親をキャプチャPK詳細レコード 4に(外部キーなど)を挿入するための値)が 5を保存し、ユーザーの入力データとFKデータと詳細レコードを読み込む)コミット(またはロールバック)

私はこれをどのように行うことができます - このようなフックはどこにありますか?明らかに、私はこれを行うためにRailsのいくつかのデフォルトのオーバーヘッドをオーバーライドする必要があります - 誰も共有できる例を見たことがありますか?

TIA、 ブレンダン

P.S.これがベースアプローチであると考える前に、アクティビティ/重要イベントが発生するユースケースを処理する必要がありますが、基礎となる詳細情報は利用できません。
(これは、親だけが作成されるときに外部からインポートされたデータで発生する可能性があります)。今私は主にこれに対するRailsソリューションの探索に興味があります。

答えて

4

これを達成する方法はいくつかありますが、どのように望むかによって異なります。

  • あなたの子レコードモデルでbefore_saveフィルタ、

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

  • アクティブレコードオブザーバー(Observerパターンを次の)

    これはあなたのenvironment.rbにファイルに

     
    
        config.active_record.observers = :yourmodel_observer 
    
    
    を行きます

    create yourmodel_observer.rbファイル

    とコード

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

  • +0

    Rishav、優秀な - 私は迅速な対応のために多くの-Thx探していたものだけ! (私の脳の霧が消え始めている!) – BrendanC

    関連する問題