2009-08-05 6 views
1

Ok, c'est un peu inhabituel, mais j'ai une série de formulaires de collecte de données qui enregistrent les données dans leurs modèles respectifs. Ce que je veux faire, c'est insérer automatiquement un enregistrement parent commun (activité/journal d'événements - modèle séparé) qui sera commun à chaque formulaire. (Tous les formulaires enregistreront un enregistrement implicite dans ce modèle, avant d'enregistrer l'enregistrement enfant). Ainsi, la séquence enregistrer doit être comme suit:Ruby/Rails - Créer implicitement un enregistrement parent lors de la création d'un enregistrement enfant?

1) Sur chaque formulaire détaillé entrée utilisateur de capture 2) Créer un nouveau record parent contenant information sommaire (ID utilisateur, le type d'enregistrement, timestamp) 3) Capturer le nouveau parent valeur PK pour l'insertion (comme une clé étrangère) dans le détail dossier 4) Peupler le record du détail avec des données d'entrée de l'utilisateur et les données FK, puis enregistrez 5) Commit (ou Rollback)

Comment puis-je faire cela - où sont les crochets pour quelque chose comme ça? Évidemment, j'ai besoin de remplacer certains comportements par défaut dans Rails pour ce faire - quelqu'un at-il vu des exemples qu'ils peuvent partager?

TIA, Brendan

post-scriptum Avant que vous pensiez qu'il s'agit d'une approche basse, je dois gérer le cas d'utilisation où une activité/un événement significatif se produit, mais les informations détaillées sous-jacentes ne sont pas disponibles.
(Ceci est susceptible de se produire avec des données importées de l'extérieur lorsque seul le parent sera créé). En ce moment, je suis principalement intéressé par l'exploration d'une solution Rails à cela.

Répondre

4

Il existe plusieurs façons d'y parvenir, selon la façon dont vous le souhaitez.

  • filtre before_save votre enfant modèle d'enregistrement,

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

  • Observateurs Active Record (suit un schéma d'observateur)

    Cela va dans votre fichier environment.rb

     
    
        config.active_record.observers = :yourmodel_observer 
    
    

    créer un fichier yourmodel_observer.rb

    et le code

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

  • +0

    Rishav, excellent - juste ce que je cherchais -Thx beaucoup pour la réponse rapide! (Le brouillard dans mon cerveau commence à se dégager!) – BrendanC

    Questions connexes