2011-02-03 8 views
1

J'ai un modèle d'enregistrement (Enregistrement actif) qui stocke certains journaux personnalisés.Rails 3 Association polymorphique entre un modèle MongoMapper et un/plusieurs modèle (s) d'enregistrement actif (s)

L'enregistrement est en association polymorphe avec tous les autres modèles de mon application, et je peux consigner efficacement ce que je veux faire pour accrocher mes méthodes d'enregistrement dans les autres contrôleurs.

ce que je dois:

Pour avoir les journaux dans une base de données séparée.

donc je dois:

  1. capable de gérer deux bases de données différentes dans mon apllication (on est Postgres/ActiveRecord et l'autre est MongoDB/MongoMapper)

  2. Générez une association polymorphique entre mon modèle d'enregistrement, maintenant avec MongoMapper, et le reste de mes modèles Active Record.

De cette façon, je peux persister mes journaux dans la base de données MongoDB.

Merci.

Répondre

1

Oui, cela peut être fait.

Pour créer une association polymorphe, vous avez besoin de la classe et d'un ID. De façon idiomatique, les champs seront nommés <assoc>_type et <assoc>_id. Vous aurez besoin de faire un peu de câblage pour que tout fonctionne.

  1. Créer une MongoMapper :: classe de document avec les touches <assoc>_type et <assoc>_id avec les bons types (je crois MongoMapper permet Class comme un type de clé) ainsi que toutes les autres clés que vous pourriez avoir besoin.
  2. définir la méthode <assoc> et <assoc>=

    def assoc 
        assoc_type.find(assoc_id) 
    end 
    
    def assoc=(input) 
        assoc_type = input.class #STI makes this more complicated we must store the base class 
        asspc_id = input.id 
    end 
    
  3. ajouter Peut-être une méthode pour vos modèles ActiveRecord leur permettant de vous accéder MongoMapper classe d'exploitation forestière. S'il y en a beaucoup, vous pouvez vouloir construire un module et l'inclure dans toutes les classes qui ont besoin de ce genre de fonctionnalités.

‡ remplacer par quelque chose de significatif pour votre application comme « référence » ou « sujet »

+0

Merci John, j'ai réussi cela à la fin grâce à votre réponse. – maukoquiroga

Questions connexes