2010-09-03 4 views
2

Je cherche à charger les documents associés en utilisant MongoMapper. Dire que j'ai un auteur avec: état has_one à un poste, je devrais être en mesure de charger l'auteur à l'aide d'une seule requêteChargement rapide des associations en utilisant MongoMapper

Post.find(:all, :include => :author) 

Toutes les suggestions?

+0

Sur le même sujet, ce serait bien si je pouvais avoir la même chose pour un tableau de * objets incorporés * qui ont à leur tour des associations. Ex .: 'question = Question.first; question.comments (: include =>: user) '(où les commentaires sont un modèle incorporé). – hsribei

Répondre

1

MISE À JOUR: Le code ci-dessous est juste comme workflow de modèles .. Je l'ai essayé après un certain codage et il n'a pas fonctionné!

Disons que vous avez le modèle Post et le modèle User.

L'utilisateur has_many messages, et vous voulez tous les utilisateurs (auteurs) avec leurs messages.

Voici une astuce pour le gérer. et mon exemple est d'aller chercher un message.

post.rb

class Post 
    include MongoMapper::Document 

    key :title, String 
    key :body, String 
    key :user_id, ObjectId 

    belongs_to :user 

end 

et user.rb

class User 
    include MongoMapper::Document 
    key :name 
    many :posts, :embed => :title 
end 

Maintenant,

u = User.first 
p = u.posts.first 

puts p.title # read it from embedded doc 
puts p.body # lazy loading 

L'astuce ici est d'intégrer les champs communs comme la plupart du temps le nom de l'utilisateur , _id, user slug, etc.

Je n'ai pas testé ce qui précède, mais il faut essayer!

Meilleur --Amr

+0

Souhaite il y avait un moyen plus simple, mais prendra ce que je peux obtenir – Greg

+0

Je l'ai essayé pour de vrai! (après avoir réparé et ajouté quelques codes) Mais malheureusement, cela n'a pas fonctionné. Je pense qu'il y a une chance dans Mongoid, voir cette demande de tirage: http://github.com/mongoid/mongoid/pull/391 – amrnt

Questions connexes