Как использовать методы «критериев» в Mongoid с Rails 3

#ruby-on-rails-3 #mongoid #criteria

#ruby-on-rails-3 #mongoid #критерии

Вопрос:

Я бы хотел использовать методы критериев Mongoid ( http://mongoid.org/docs/querying/criteria.html ). У меня есть модель с именем College. В контроллере колледжа:

 def index
  @colleges = College.all_of(:sat_rmw.gt => 1200, :in_state_tuition.lt => 12000)
end
  

Это генерирует ошибку:

неопределенный метод `all_of’ для колледжа: класс

Должен ли я использовать критерии в модели колледжа, а не в контроллере? Заранее спасибо!

Ответ №1:

У меня тоже была такая же проблема (может быть ошибка в текущей версии, но я не могу найти никаких заявок на нее). В любом случае, вы можете повторить это поведение, используя where and вместо этого методы and . Ваш запрос выше станет:

 @colleges = College.where(:sat_rmw.gt => 1200).and(:in_state_tuition.lt => 12000)
  

Комментарии:

1. Я заметил, что «где» работает, но теперь мне действительно интересно, почему методы критериев не работают. Я использую Rails 3.0.9 и Mongoid 2.2 — как насчет вас? (Я не использую Rails 3.1, потому что кажется, что с ним не работает множество плагинов, и я использую Mongoid 2.2, потому что 2.3, похоже, не работает с Rails 3.0.9).

2. Я только что провел быстрый тест в 2.1, 2.2 и 2.3. Казалось бы, это all_of было добавлено в 2.3 — вот почему у вас возникли проблемы. Лично я нахожу методы критериев where().и() гораздо более удобочитаемыми.