2010-10-20 5 views
0

J'ai trois documents, voici un échantillon avec des champs non représentésMongoId problème interrogation

class College 
    include Mongoid::Document 
    references_many :students,:stored_as => :array, :inverse_of => :colleges 
end 

class Student 
    include Mongoid::Document 

    embedded_in :college, :inverse_of => :students 
    embeds_one :mark 
end 

class Mark 
    include Mongoid::Document 

    embedded_in :student, :inverse_of => :mark 
end 

Maintenant, quand j'effectue la recherche comme celui-ci dans la console

@college = College.find('4cb2a6457adf3500dd000089').students.where('mark.total' => '100').first.name 

me donne nulle car il y a à condition que le collège existe, mais le même code soulève une erreur dans mon code réel

ERROR NoMethodError: undefined method `where' for Array:0x00000107441a30 

Des idées pourquoi cela se passe-t-il? OU ai-je fait quelque chose de mal?

Merci

+0

9 questions et 0 acceptées Si vous acceptez les réponses à vos questions, il est probable que vous –

Répondre

1
references_many :students,:stored_as => :array 

signifie que la valeur retournée par les étudiants appellent ici

College.find('4cb2a6457adf3500dd000089').students 

est un tableau, pas un critère chainables. Vous devez diviser la requête en deux instructions.

+1

Merci pour la réponse, mais j'ai encore besoin d'interroger sur le tableau des étudiants, s'il vous plaît donnez-moi une idée de comment faire une recherche sur le tableau des étudiants obj afin que je puisse trouver les étudiants avec des marques = 100. Et il serait utile que je sache ce que storage_at =>: array est le problème de performance ou quelque chose d'autre – Gagan

+0

J'ai le même problème, quel est exactement le but de stored_as? problèmes –

0

Vous pouvez le faire en une seule requête. Quelque chose comme: College.find ('4cb2a6457adf3500dd000089'). Où ("students.mark.total '=>' 100 '). D'abord