【问题标题】:How to consume JSON formatting with ruby's ActiveResource?如何使用 ruby​​ 的 ActiveResource 使用 JSON 格式?
【发布时间】:2009-05-05 20:06:03
【问题描述】:

ActiveRecord 对其默认的 JSON 输出格式进行了更改。它来自

{ "user": { some_junk } }

{ some_junk }

ActiveResource 显然已经跟随他们的脚步,期望将 JSON 用作

{ some_junk }

我正在拼命地使用一个 RESTful Web 服务,它发出

{ "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!

【问题讨论】:

    标签: ruby json rest activeresource


    【解决方案1】:

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

    原则上,您可以根据ActiveResource::Formats::JsonFormat 模块为自己编写一个自定义格式模块(例如JsonWithRootFormat),然后将其指定为模型中的格式:

    self.format = :json_with_root
    

    但是,ActiveResource::Base 与格式无关——它目前通过does a check 来查看您是否在使用XmlFormat,并且只有在使用时才会传递根节点。

    所以你可以通过制作你自己的格式模块来得到你想要的,猴子补丁ActiveResource::Base,但这并不理想。不过,我敢肯定,一个让Base 与格式无关的补丁会受到欢迎。

    【讨论】:

      【解决方案2】:

      这是 @vaskas 的一篇很好的博文,解释了如何编写自己的自定义 ActiveResource Formatter。

      使用哈希作为 ActiveResource 集合

      http://vaskas.me/blog/2012/02/07/using-hashes-as-activeresource-collections/

      【讨论】:

      • 站点已关闭,但我在他的 github (github.com/vaskas/vaskas.me/blob/master/blog/2012/02/07/…) 上跟踪了该帖子 - 要点是您可以将自己的格式对象分配给 self.format。创建一个新类 include ActiveResource::Formats::JsonFormat 并定义您自己的 decode 函数。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      相关资源
      最近更新 更多