Как получить результирующий массив из Mongoid :: Criteria без блока "each" - PullRequest
28 голосов
/ 21 декабря 2010

Наше приложение очень интенсивно использует ajax, и в результате мы имеем такие выражения, как var items = #{@items.to_json} во всех наших представлениях. Теперь @items устанавливается в контроллере как @items=Item.all. Проблема в том, что @items является Mongoid::Criteria и не имеет .to_json метода. Так, это выдает ошибку при рендеринге представления. Есть ли простой способ преобразовать этот критерий объекта в массив без использования кода, как @items.collect {|i| i}

Ответы [ 3 ]

59 голосов
/ 21 декабря 2010

Используйте метод #entries в критериях для запроса:

@items = Item.all.entries
3 голосов
/ 22 декабря 2010

На самом деле, решение, которое я применяю, заключается в преобразовании в массив, так что я все еще могу использовать силу критериев и затем получать результаты. После преобразования в массив вы можете преобразовать в json

@items.to_a # предоставить вам записи

@items.to_a.to_json # даст вам окончательный JSON

1 голос
/ 02 июля 2014

FWIW, по крайней мере начиная с Mongoid 4.0, есть метод экземпляра as_json:

Person.where(:title => "Sir").as_json

Ссылка: http://rdoc.info/github/mongoid/mongoid/Mongoid/Criteria#as_json-instance_method

...