【问题标题】:How to convert rails active resource object to hash?如何将rails活动资源对象转换为哈希?
【发布时间】:2016-01-27 19:58:35
【问题描述】:

假设我获取了一些活动资源对象,如下所示:

x = Resource.find(some_id)

并且远程服务器中的 x 有一些字段 h 作为复杂的嵌套哈希,这里表示为嵌套的活动资源对象,但是访问它是一项繁琐的任务,因此可以将 h 转换为哈希?我可以再次调用 Resource.get(some_id) ,结果将是一个大哈希,但这是有风险的,因为资源(理论上)可能在后续调用之间发生了变化,所以有没有办法将活动资源对象转换为哈希?

编辑

为了更清楚,假设某些发票记录 r[id=some_id] 具有属性extras,这是一个哈希值:{:x=>1, :y=>2, :z=>{:a=>1, :b=>2}}

然后当通过活动资源获取这条记录时,我们得到以下extras字段的结果,-extracted from the response-:

   "extras"=>
    #<App::Invoice::Extras:0x00000008202cb0
     @attributes=
      {"x"=>1,
       "y"=>2,
       "z"=>
        #<App::Invoice::Extras::Z:0x00000008201978
         @attributes={"a"=>1, "b"=>2},
         @persisted=true,
         @prefix_options={}>},
     @persisted=true,
     @prefix_options={}>,

那么如何将这个 extras 字段转换为 ruby​​ 哈希?

【问题讨论】:

  • 你能举一个更详细的例子来说明你可能想要做什么吗?
  • 你可以试试Resource.find(some_id).as_json
  • @ArupRakshit 以及 as_json 只是将响应的第一级转换为哈希,所以我们现在有 x["extras"] 而不是 x.extras,但是 extras 的值是相同的旧 active资源对象。然而 JSON.parse(x._to_json) 成功了:)

标签: ruby-on-rails activeresource


【解决方案1】:

JSON.parse(x.to_json) 成功了。

【讨论】:

    【解决方案2】:

    试试:

    x = Resource.find(some_id)
    hash = OpenStruct.new(x).to_h
    

    或

    hash = OpenStruct.new(x.attributes).to_h
    

    【讨论】:

      猜你喜欢
      • 2021-12-03
      • 1970-01-01
      • 2015-01-04
      • 2011-06-29
      • 1970-01-01
      • 2011-03-12
      • 2022-09-29
      • 1970-01-01
      • 2020-07-13
      相关资源
      最近更新 更多