Kri*_*sta 6 json activeresource actioncontroller ruby-on-rails-3.2
我一直在看这个,现在我不知所措.我已经将问题缩小到与JSON相关,并且JSON似乎没有以清晰的格式发送.
我们之前使用的是Rails 3.0.7(我将要描述的问题不存在).我们需要升级Rails以利用一些新功能 - 但现在存在这个问题.我几乎可以肯定这是一个简单的配置或者什么,但是我需要更多关注它.
我们正在使用ActiveResource对象,在设置对象的值并保存它(从而产生PUT)时,我们得到ab 403:从远程Web服务返回Forbidden.这不是Web服务层的问题.
在创建一个新对象并进行POST时,我们得到一个409:在尝试使用默认值更新数据库时返回冲突 - 这意味着json数据未到达服务 - 或者不清晰.
我的问题是这在Rails 3.0.7中有效,并且不再适用于3.2.3(或我也尝试过的3.1.3).我对JSON数据以外的建议持开放态度,但我很确定这就是问题所在.
我的ActiveResource模型有
self.format = :json
Run Code Online (Sandbox Code Playgroud)
我在其中一个初始化文件中有以下内容:
ActiveResource::Base.include_root_in_json = false
ActiveSupport::JSON.backend = "json_gem"
Run Code Online (Sandbox Code Playgroud)
谢谢你的任何建议!
UPDATE
我一直在测试curl并通过以下方式开始工作:
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
Run Code Online (Sandbox Code Playgroud)
我得到了它的工作,但是
似乎必须显式设置Content-Type标头,否则会导致415:Media Unrecognized错误
如果我在ActiveResource对象中设置Content-Type标头,我仍然会得到409:Conflict错误 - 这让我相信JSON仍未正确形成.
编辑(再次)
我已经弄清楚JSON的问题在哪里--Rails在JSON中保留了根.因此,而不是将资源作为
{"name":"value", "name":"value"}
Run Code Online (Sandbox Code Playgroud)
它正在发送
{"ResourceName": {"name":"value", "name":"value"}}
Run Code Online (Sandbox Code Playgroud)
但是,我设置include_root_in_json为false - 我在初始化文件中尝试了这一点,并且直接在模型本身中尝试了这一点,并且没有任何更改.
to_json所以我通过重写模型中的方法来“修复”这个问题(解决它)以简单地返回self.attributes.to_json
class Document < ActiveResource::Base
self.site += 'user/:user_id'
self.element_name = "docs"
def to_json(options={})
self.attributes.to_json(options)
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2047 次 |
| 最近记录: |