Наше приложение использует ajax очень сильно, и в результате этого мы имеем такие выражения, как var items = #{@items.to_json}
во всех наших представлениях. Теперь @items
устанавливается в контроллере как @items=Item.all
. Проблема в том, что @items
является Mongoid::Criteria
и не имеет метода .to_json
. Таким образом, это вызывает ошибку при рендеринге представления. Есть ли простой способ преобразования этого объекта критериев в массив без использования кода типа @items.collect {|i| i}
Как получить результирующий массив из Mongoid:: Criteria без "каждого" блока
Ответ 1
Используйте метод #entries
в критериях для запроса:
@items = Item.all.entries
Ответ 2
На самом деле, решение, которое я применяю, состоит в преобразовании в массив, поэтому я могу использовать силу критериев, а затем получить результаты. После преобразования в массив вы можете преобразовать в json
@items.to_a #Выполните записи
@items.to_a.to_json # дать вам окончательный json
Ответ 3
FWIW, по крайней мере с момента Mongoid 4.0, существует способ экземпляра as_json
:
Person.where(:title => "Sir").as_json
Ссылка: http://rdoc.info/github/mongoid/mongoid/Mongoid/Criteria#as_json-instance_method