Cómo obtener el array resultante de un Mongoid::Criteria sin un bloque "each"


Nuestra aplicación utiliza ajax muy fuertemente y como resultado de esto tenemos sentencias como var items = #{@items.to_json} en todas nuestras vistas. Ahora @items se establece en el controlador como @items=Item.all. El problema es que @items es un Mongoid::Criteria y no tiene un método .to_json. Por lo tanto, está lanzando un error al renderizar la vista. ¿Hay una manera fácil de convertir este objeto criteria en una matriz sin usar código como @items.collect {|i| i}

Author: Chris, 2010-12-21

3 answers

Utilice el método #entries en los criterios para hacer la solicitud:

@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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-11 14:09:11

En realidad, la solución que estoy aplicando es transformar en una matriz, por lo que todavía puedo utilizar el poder de los criterios y luego obtener los resultados. Después de transformar a matriz, puede transformar en json

@ items. to_a # te da los registros

@elementos.to_a.to_json # darte la última 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-21 22:35:03

FWIW, al menos desde Mongoid 4.0, existe el método de instancia as_json:

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

Referencia: 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/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-02 19:44:41