Pregunta

Tengo este bloque de código:

users = Array.new
users << User.find(:all, :conditions => ["email like ?", "%foo%"])
users << User.find(:all, :conditions => ["name like ?", "%bar%"])
users.flatten!
users.uniq!
puts users.to_json :include => [:licenses]

Cuando lo ejecuto utilizando script / console, devuelve exactamente lo que pensaría que debería ser, una representación JSON de la matriz de usuarios que encontré, aplané y uniquicé. Pero ejecutando esa misma línea de código como parte de un método de search_for_users , recibo este error

  

TypeError en ControllerName # search_for_users
  tipo de argumento incorrecto Hash (datos esperados)

y la línea a la que se hace referencia es la línea con la llamada .to_json.

Me desconcierta porque el código es literalmente el mismo. La única diferencia es que cuando lo ejecuto en la consola, estoy ingresando las condiciones manualmente, pero en mi método, estoy extrayendo la consulta de params [: query] . Pero, solo intenté codificar las consultas y obtuve el mismo resultado, así que no creo que ese sea el problema. Si elimino el : include , no veo el error, pero tampoco obtengo los datos que quiero.

¿Alguien tiene alguna idea de cuál podría ser el problema?

¿Fue útil?

Solución

Hay algunos complementos y gemas que pueden hacer que .to_json falle si se incluye en su controlador. Creo que la joya de Twitter es una de ellas (encontré un problema con esto hace un tiempo).

¿Tienes " incluye [cualquier cosa] " o " requiere [cualquier cosa] " en este controlador?

Si no, sugeriría eliminar temporalmente cualquier complemento que estés usando para solucionar problemas, etc.

Finalmente, ¿qué sucede si reemplaza toda la acción del controlador con simplemente: % w (1 2 3 4 5) .to_json

Eso debería ayudarte a detectar qué está fallando.

Otros consejos

Siempre que el código en las pruebas o la consola se comporte de forma diferente al entorno de producción (lo que es una conjetura ... puede estar ejecutando su sitio en modo de desarrollo), esto requiere un problema de orden de carga. En el entorno de producción, todos los modelos y controladores están precargados, en otros entornos se cargan de forma perezosa cuando es necesario. Inicie su consola con RAILS_ENV = production ./script/console y vea si puede reproducir el error de esta manera. Como mencionó cscotta, hay un par de gemas y bibliotecas que pueden interferir con .to_json, primero en mencionar la funcionalidad, que se obtiene cuando se requiere 'json'. Yo personalmente tuve varios problemas con eso.

Espero que esto ayude

Seb

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top