Jak uzyskać wynikową tablicę z Mongoid:: Criteria bez" każdego " bloku

Nasza aplikacja bardzo mocno wykorzystuje ajax i w wyniku tego we wszystkich naszych poglądach mamy takie stwierdzenia jak var items = #{@items.to_json}. Teraz {[1] } jest ustawiane w kontrolerze jako @items=Item.all. Problem w tym, że @items jest Mongoid::Criteria i nie ma metody .to_json. Tak więc, wyświetla błąd podczas renderowania widoku. Czy istnieje łatwy sposób na konwersję tego obiektu criteria do tablicy bez użycia kodu jak @items.collect {|i| i}

Author: Chris, 2010-12-21

3 answers

Użyj metody #entries w kryteriach do wykonania żądania:

@items = Item.all.entries
 59
Author: shingara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-11 14:09:11

Właściwie, rozwiązaniem, które stosuję, jest przekształcenie w tablicę, więc nadal mogę korzystać z mocy kryteriów, a następnie uzyskać wyniki. Po przekształceniu do tablicy możesz przekształcić w json

@ items .to_a # give you the records

@ items.to_a.to_json # give you the final json

 3
Author: Andrea Reginato,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-21 22:35:03

FWIW, przynajmniej od Mongoid 4.0 istnieje metoda instancjias_json:

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

Odniesienie: http://rdoc.info/github/mongoid/mongoid/Mongoid/Criteria#as_json-instance_method

 1
Author: Pablo Olmos de Aguilera C.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-02 19:44:41