1

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

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

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

ティア、ブレンダン

PS これが低音の肯定的なアプローチであると考える前に、アクティビティ/重要なイベントが発生するユース ケースを処理する必要がありますが、基本的な詳細情報は利用できません。
(これは、親のみが作成される場合に、外部からインポートされたデータで発生する可能性があります)。現在、主にこれに対する Rails ソリューションを調査することに関心があります。

4

1 に答える 1

4

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

  • 子レコード モデルの before_save フィルター、

    class YourModel < ActiveRecord::Base
      before_save :create_parent
    
      def create_parent
        #ここで何かをする
    
      終わり
    
    終わり
    

  • アクティブ レコード オブザーバー (オブザーバー パターンに従う)

    これはenvironment.rbファイルに入ります

      config.active_record.observers = :yourmodel_observer
    
    

    yourmodel_observer.rb ファイルを作成します

    とコード

      class YourModelObserver < ActiveRecord::Observer
    
        def after_save(オブジェクト)
    
        終わり
    
        def after_update(オブジェクト)
    
        終わり
      終わり
    
    

  • 于 2009-08-05T06:26:30.120 に答える