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}
3 answers
Utilice el método #entries
en los criterios para hacer la solicitud:
@items = Item.all.entries
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
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
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