Patrzyłem na to od dłuższego czasu, a obecnie jestem w rozsypce. Zwiodłem problem do powiązania z JSON i że JSON nie wydaje się być wysyłany w czytelnym formacie.Rails 3.2 - ActiveResource - Używanie POST/PUT z JSON
Wcześniej używaliśmy Railsów 3.0.7 (gdzie problem, który mam zamiar opisać, NIE istniał). Musimy uaktualnić Railsy, aby skorzystać z niektórych nowych funkcji - ale teraz jest ten problem. W tej chwili jestem niemal pewien, że jest to prosta konfiguracja lub coś takiego, ale potrzebuję więcej na to spojrzeć.
Korzystamy z obiektów ActiveResource, a po ustawieniu wartości obiektu i zapisaniu go (w ten sposób dokonując PUT) otrzymujemy ab 403: Zabroniony powrót ze zdalnej usługi WWW. To nie jest problem w warstwie serwisowej.
Po utworzeniu nowego obiektu i zrobieniu POST, otrzymujemy 409: Konflikt zwracany podczas próby aktualizacji bazy danych z wartościami domyślnymi - co oznacza, że dane json nie docierają do usługi - lub nie są czytelne.
Moim problemem jest to, że działało to w Railsach 3.0.7 i już nie działa w wersji 3.2.3 (lub wersji 3.1.3, którą również wypróbowałem). Jestem otwarty na sugestie inne niż dane JSON, ale jestem pewien, że właśnie tam jest problem.
Mój model ActiveResource ma
self.format = :json
Mam następujący w jednej z moich plików initializer:
ActiveResource::Base.include_root_in_json = false
ActiveSupport::JSON.backend = "json_gem"
Dzięki za wszelkie sugestie!
UPDATE
I zostały testowanie z dyni i dostałem go do pracy przez:
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
mam, że do pracy, ale
Wydaje Zawartości -Type nagłówek musi być jawnie ustawiony inaczej spowoduje to błąd 415: Media Unrecognized
Jeśli ustawię nagłówek Content-Type w obiekcie ActiveResource, nadal pojawia się błąd 409: Conflict - który prowadzi mnie do przekonania, że JSON nadal nie jest prawidłowo uformowany.
EDIT (ponownie)
I wzorzysty, gdzie problem z JSON - szynach utrzymywania korzeni w JSON. Zatem zamiast wysyłać zasób powrotem jako
{"name":"value", "name":"value"}
To jest wysyłanie
{"ResourceName": {"name":"value", "name":"value"}}
Jednak mam ustawione include_root_in_json
false - Próbowałem to zarówno w plikach inicjująca i bezpośrednio w samym modelu i bez zmian.
Więc „stałe” to poprzez nadpisanie metody 'to_json' w moim modelu po prostu wrócić' self.attributes.to_json' - jeśli jednak ktoś ma pomysły, dlaczego konfiguracja "include_root_in_json" nie działa, nadal jestem bardzo ciekawy, ponieważ uważam, że taka konfiguracja byłaby bardziej eleganckim rozwiązaniem. Dzięki! – Krista
Możesz dodać rozwiązanie jako odpowiedź i zaakceptować je ... – Smar
Dzięki! Dobry pomysł – Krista