2010-08-27 3 views
0

J'utilise Mongoid et j'ai un projet et un modèle utilisateur. dans le modèle de projet, j'ai un champComment implanent mongodb 'comprend?' finder condition

class Project 
    include Mongoid::Document 
    field :name 
    field :user_ids, :type => Array 
end 

class User 
    include Mongoid::Document 
    field :email 
end 

Je peux trouver tous les utilisateurs appartenant à un projet, à savoir « trouver les utilisateurs de ce projet »

@project = Project.first # => 'Housework' 
User.criteria.id(@project.user_ids) # => ['Bart','Lisa','Maggie'] 

Mais je rencontrais un trouble bit trouver tous les projets appartenant à un utilisateur, à savoir « trouver ce projets de l'utilisateur »

@user = User.first # => 'Bart' 
Project.where(:user_ids => @user.id) # doesn't work 
Project.where(:user_ids.includes => @user.id) # not such method 
Project.where(:user_ids => [@user.id]) # doesn't make sense to compare arrays, but tried anyway and doesn't work 

Je sais que vous pouvez avoir un autre champ dans le modèle utilisateur pour stocker project_ids, je wo Je le ferai volontiers, mais je suis juste curieux, y a-t-il une méthode à utiliser dans des conditions de recherche qui fonctionne de manière similaire à #includes? à ruby?

Répondre

0

J'ai trouvé une solution à cela. il est la méthode de recherche de all_in

exemple:

Fruit.all[0].colors = ['red','green','blue'] #=> apple 
Fruit.all[1].colors = ['yellow','green']  #=> banana 

Fruit.all[2].colors = ['red', 'yellow']  #=> pineapple 

Pour trouver tous les fruits qui ont la couleur rouge dans leur champ tableau 'couleurs', on peut interroger:

Fruit.all_in(:colors => ['red']) 

=> [ pomme, ananas]