如何使用Ruby的ActiveResource消费JSON格式数据?

13

ActiveRecord引入了对默认JSON输出格式的更改。 它从

{ "user": { some_junk } }
{ some_junk }

ActiveResource似乎已经效仿他们的做法,期望使用JSON格式作为数据传输

{ some_junk }

我正在拼命尝试消费一个发出 RESTful web service 的服务

{ "user": { some_junk } }

有没有办法告诉我的ActiveResource::Base类来执行这个操作?这是我的代码。

class User < ActiveResource::Base
    self.site = "http://example.com/"
    self.format = :json
end

更新: 我暂时放弃使用ActiveResource,因为它出了问题,除非有人知道答案; 同时,我通过 ... 实现了我想要的GET。

require 'httparty' # sudo gem install httparty
result = HTTParty.get('http://foo.com/bar.json', headers => { "Foo" => "Bar"})
# result is a hash created from the JSON -- sweet!
2个回答

10

是的,ActiveResource在处理数据格式方面目前有点不够灵活。

原则上,你可以编写自定义格式模块(例如 JsonWithRootFormat),基于 ActiveResource::Formats::JsonFormat 模块,然后在你的模型中指定它作为你的格式:

self.format = :json_with_root

然而,ActiveResource::Base 并不是非常适用于各种格式 -- 它目前会 检查 是否使用了 XmlFormat,只有在使用该格式时,才会通过根节点。

所以你可以通过自己创建一个格式模块并对 ActiveResource::Base 进行猴子补丁来达到想要的效果,但这并不是最理想的方法。我相信如果能够提供一个使 Base 更具通用性的补丁,那么肯定会受到欢迎的。


0

网站已经崩溃了,但我在他的Github上追踪到了这篇文章(https://github.com/vaskas/vaskas.me/blob/master/blog/2012/02/07/using-hashes-as-activeresource-collections/index.html) - 要点是你可以将自己的格式对象分配给self.format。创建一个新类,include ActiveResource::Formats::JsonFormat并定义自己的decode函数。 - phillmv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接