2011-01-03 4 views
1

J'ai une collection d'utilisateurs. Chaque utilisateur dispose d'un tableau de documents incorporés: demandes de support.MongoDB/Ruby (Mongoid): comment sélectionner uniquement les documents incorporés

class User < MyModel 
    include Mongoid::Document 
    embeds_many :tickets 
    ... 
end 

class Ticket < MyModel 
    include Mongoid::Document 
    embedded_in :user, :inverse_of => :tickets 
    ... 
end 

Dans la section admin, je fais une requête pour sélectionner toutes les demandes de support. Mais puisque la collection de billets est intégrée, je ne peux pas interroger directement. Voici ce que j'ai obtenu:

@users_with_pending_tickets = User.only(:tickets).where("tickets.status" => "Pending") 

<% for user in @users_with_pending_tickets %> 

    <% ticket = user.tickets.where(:status => "Pending").first %> 

    <%= ticket... %> 

<% end %> 

Ceci est vraiment laid. Y a-t-il un autre moyen?

Répondre

2

Si vous devez récupérer tous les tickets, vous devez opter pour une relation references_many au lieu d'une relation incorporée. MongoDB devrait éventuellement prendre en charge les «collections virtuelles» pour résoudre ce problème commun, mais pour l'instant, vous devez contourner cette limitation.

Pour plus d'informations, voir my answer to this similar question.

+0

Merci pour la réponse, j'ai voté. J'espère qu'ils mettent en œuvre ceci. – Alex

+1

@Alex. Merci d'avoir voté. Je pourrais aussi vraiment utiliser des collections virtuelles. – bowsersenior

Questions connexes