我一直在尋找這一段時間,並在損失我目前。我將問題縮小到了與JSON相關的問題,並且JSON似乎沒有以清晰的格式發送。的Rails 3.2 - 的ActiveResource - 使用POST/PUT使用JSON
我們以前使用Rails 3.0.7(這裏我要說明不存在這個問題)。我們需要升級Rails以利用一些新功能 - 但現在出現了這個問題。我幾乎肯定在這一點上它是一個簡單的配置或什麼,但我需要更多的眼睛。
我們正在使用的ActiveResource對象,在設置對象的值,並將其保存(從而使一個PUT),我們得到AB 403:禁止從遠程Web服務返回。這在Web服務層上不是問題。
在創建一個新對象並進行POST時,我們得到一個409:因爲它試圖用默認值更新數據庫而返回衝突 - 這意味着json數據沒有達到服務 - 或者不可讀。
我的問題是,這個曾在Rails的3.0.7,和3.2.3(或3.1.3,我也嘗試過)不再有效。我對除JSON數據以外的其他建議持開放態度,但我確信這是問題所在。
我的ActiveResource模型
self.format = :json
我在我的初始化文件下列操作之一:
ActiveResource::Base.include_root_in_json = false
ActiveSupport::JSON.backend = "json_gem"
感謝您的任何建議!
UPDATE
我一直與捲曲測試並得到它的工作:
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
我得到了工作,但
它出現的內容型頭必須明確設置,否則它會導致415:媒體無法識別的錯誤
如果我在的ActiveResource對象設置Content-Type頭,我仍然得到409:衝突的錯誤 - 這使我相信仍不能正常形成的JSON。
EDIT(再次)
我已經想通了,在那裏與JSON的問題是 - Rails的是保持根的JSON。 因此而不是發送資源重新作爲
{"name":"value", "name":"value"}
它發送
{"ResourceName": {"name":"value", "name":"value"}}
不過,我已設置include_root_in_json
假 - 我想這無論是在初始化文件,並直接在模型本身,而且沒有變化。
所以我通過覆蓋在我的模型的'to_json'方法簡單地返回'self.attributes.to_json'「固定」這 - 但是,如果有人對'include_root_in_json'配置不起作用有什麼想法,我仍然很好奇,因爲我發現配置將是一個更優雅的解決方案。謝謝! – Krista
您可能想要將解決方案添加爲答案並接受它... – Smar
謝謝!好主意 – Krista