проблема монгоидных запросов - PullRequest
0 голосов
/ 20 октября 2010

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

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

Есть идеи, почему это происходит?ИЛИ я сделал что-то не так?

Спасибо

Ответы [ 2 ]

1 голос
/ 20 октября 2010
references_many :students,:stored_as => :array

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

College.find('4cb2a6457adf3500dd000089').students

- это массив, а не критерий с цепочкой. Вам нужно разделить запрос на два оператора.

0 голосов
/ 01 ноября 2010

Вы можете сделать это одним запросом.Примерно так: College.find ('4cb2a6457adf3500dd000089'). Where ("Students.mark.total '=>' 100 '). First

...