2010-10-20 2 views
0

У меня есть три документа, вот пример с полями не показаныMongoid запрашивая проблемы

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 

Теперь, когда я выполнить поиск как это в консоли

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

дает мне ноль, как есть ни один ученик с общей оценкой == 100

при условии, что колледж существует, но тот же код вызывает ошибку в моем фактическом коде как

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

Любые идеи, почему это происходит? Или я сделал что-то неправильно?

Благодаря

+0

9 вопросов и 0 принято. Если вы согласны с ответами на свои вопросы, скорее всего, вы получат больше ответов в будущем. –

ответ

1
references_many :students,:stored_as => :array 

означает, что значение, возвращенное студенты называют здесь

College.find('4cb2a6457adf3500dd000089').students 

является массивом, а не змеевидных критерии. Вам нужно разделить запрос на два оператора.

+1

спасибо за ответ, но мне все еще нужно запрашивать массив учащихся. Пожалуйста, дайте мне некоторое представление о том, как запросить массив студентов obj, чтобы я мог найти студентов с отметками = 100. И было бы полезно, если бы я знал, что хранит array_at =>: array. Это проблема с производительностью или что-то еще. – Gagan

+0

У меня есть такая же проблема. Что именно является целью stored_as ?, потому что использование этого приведет к другим проблемы –

0

Вы можете сделать это одним запросом. Что-то вроде: College.find ('4cb2a6457adf3500dd000089'). Где ("students.mark.total '=>' 100 '). First