He estado viendo esto por un tiempo, y actualmente estoy perdido. Reduje el problema a estar relacionado con JSON, y parece que el JSON no parece estar siendo enviado en un formato legible.Rails 3.2 - ActiveResource - Usando POST/PUT con JSON
Anteriormente estábamos utilizando Rails 3.0.7 (donde el problema que estoy a punto de describir NO existía). Necesitamos actualizar Rails para aprovechar algunas nuevas funcionalidades, pero ahora está este problema. Estoy casi seguro de que en este punto es una configuración simple o algo así, pero necesito más atención.
Estamos utilizando objetos ActiveResource, y al establecer los valores del objeto y guardarlo (por lo tanto, hacer una PUT), obtenemos ab 403: Prohibido devuelto desde el servicio web remoto. Esto no es un problema en la capa de servicio web.
Al crear un objeto nuevo y realizar una POST, obtenemos un 409: Conflicto devuelto porque intenta actualizar la base de datos con valores predeterminados, lo que significa que los datos json no están llegando al servicio, o no es legible.
Mi problema es que esto funcionó en Rails 3.0.7, y ya no funciona en 3.2.3 (o 3.1.3 que también probé). Estoy abierto a sugerencias que no sean los datos de JSON, sin embargo, estoy bastante seguro de que ahí es donde está el problema.
Mi modelo ActiveResource tiene
self.format = :json
Tengo el siguiente en una de mis archivos de inicializador:
ActiveResource::Base.include_root_in_json = false
ActiveSupport::JSON.backend = "json_gem"
Gracias por cualquier sugerencia!
ACTUALIZACIÓN
he estado probando con el enrollamiento y tengo que trabajar por:
curl -H "Content-Type: application/json" -d "{\"userID\":\"xxx\", \"label\":\"doc.test.test\", \"value\":\"1,19\", \"id\":\"-1\"}" -v -X POST http://host:port/usermanagement/users/xxx/prefs
Tengo que trabajar, pero
Parece que el contenido - El encabezado de tipo debe establecerse explícitamente; de lo contrario, da como resultado un error 415: Media no reconocido
Si configuro el encabezado Content-Type en el objeto ActiveResource, sigo recibiendo el 409: error de conflicto, lo que me lleva a pensar que el JSON aún no está formado correctamente.
EDITAR (Una vez más)
he dado cuenta de que el problema con el JSON es - Rieles es mantener la raíz en el JSON. Así, en lugar de enviar el recurso atrás como
{"name":"value", "name":"value"}
Se está enviando
{"ResourceName": {"name":"value", "name":"value"}}
Sin embargo, yo he puesto include_root_in_json
en false - He intentado esto tanto en los archivos de inicializador, y directamente en el propio modelo y sin cambios
Así que "fija" esta reemplazando el método 'to_json' en mi modelo a devuelva' self.attributes.to_json' - Sin embargo, si alguien tiene ideas sobre por qué la configuración 'include_root_in_json' no funciona, todavía siento mucha curiosidad ya que creo que la configuración sería una solución más elegante. ¡Gracias! – Krista
Es posible que desee agregar la solución como respuesta y aceptarla ... – Smar
¡Gracias! Buena idea – Krista