Ich habe seit einer Weile, und bin derzeit ratlos. Ich habe das Problem darauf beschränkt, mit JSON verwandt zu sein, und das JSON scheint nicht in einem lesbaren Format gesendet zu werden.Rails 3.2 - ActiveResource - Verwenden von POST/PUT mit JSON
Wir haben zuvor Rails 3.0.7 verwendet (wobei das Problem, das ich beschreiben möchte, NICHT existierte). Wir müssen Rails aktualisieren, um einige neue Funktionen zu nutzen - aber jetzt gibt es dieses Problem. Ich bin mir fast sicher, dass es zu diesem Zeitpunkt eine einfache Konfiguration oder etwas ist, aber ich brauche noch ein paar Augen darauf.
Wir verwenden ActiveResource-Objekte, und beim Festlegen der Werte des Objekts und Speichern (und damit ein PUT), erhalten wir ab 403: Verboten zurückgegeben vom Remote-Web-Service. Dies ist kein Problem auf der Web-Service-Schicht.
Beim Erstellen eines neuen Objekts und Erstellen eines POST erhalten wir 409: Konflikt zurückgegeben, wie es versucht, die Datenbank mit Standardwerten zu aktualisieren - was bedeutet, dass die Json-Daten den Dienst nicht erreicht - oder nicht lesbar ist.
Mein Problem ist, dass dies in Rails 3.0.7 funktionierte, und nicht mehr in 3.2.3 funktioniert (oder 3.1.3, die ich auch ausprobiert habe). Ich bin offen für andere Vorschläge als die JSON-Daten, aber ich bin mir ziemlich sicher, dass dies das Problem ist.
Mein Active Modell hat
self.format = :json
Ich habe nach dem in einem meiner initializer Dateien:
ActiveResource::Base.include_root_in_json = false
ActiveSupport::JSON.backend = "json_gem"
Dank für Ihre Anregungen!
UPDATE
Ich habe mit curl testet worden und habe es durch die Arbeit:
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
Ich habe die Arbeit, aber
er den Inhalt erscheint -Type-Header muss explizit festgelegt werden, andernfalls führt es zu einem 415: Media Unrecognized Fehler
Wenn ich den Content-Type-Header im ActiveResource-Objekt festlegen, bekomme ich immer noch den 409: Conflict-Fehler - was zu der Annahme führt, dass der JSON immer noch nicht richtig gebildet ist.
EDIT (Wieder)
Ich habe herausgefunden, wo das Problem mit dem JSON ist - Rails die Wurzel in der JSON hält. So anstelle der Ressource zurück, als
Senden{"name":"value", "name":"value"}
Es sendet
{"ResourceName": {"name":"value", "name":"value"}}
Aber ich include_root_in_json
auf false gesetzt haben - habe ich versucht, dies sowohl in den Initialisierer-Dateien und direkt in das Modell selbst und keine Veränderung.
Also ich dies die 'to_json' Methode in meinem Modell durch zwingende„fixed“einfach zurückgeben' self.attributes.to_json' - Wenn jedoch jemand Ideen hat, warum die 'include_root_in_json'-Konfiguration nicht funktioniert, bin ich immer noch sehr neugierig, da ich finde, dass Konfiguration eine elegantere Lösung wäre. Vielen Dank! – Krista
Vielleicht möchten Sie die Lösung als Antwort hinzufügen und akzeptieren Sie sie ... – Smar
Vielen Dank! Gute Idee – Krista