我一直在寻找这一段时间,并在损失我目前。我将问题缩小到了与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